совместное использование $scope между контроллером и фабрикой в ​​AngularJS

У меня есть переменная «файл», которая передается директиве, которую я использую в том же контроллере. Теперь я хочу использовать тот же «файл» на фабрике, которую я создаю, но я не уверен, есть ли простой способ поделиться той же переменной между контроллером и фабрикой.

Например...

fileCategory.directive.js:

.directive('fileCategory', function () {
      return {
        templateUrl: '...'
        restrict: 'EA',
        replace: true,
        scope: {
          file: '='
        },
        controller: 'fileCategoryController'
      };
    });

fileCategory.controller.js:

.controller('fileCategoryController', function($scope) {

      if(!$scope.file) {
        return;
      } else {
        console.log($scope.file);        
      }

fileCategory.factory.js

.factory('fileCategoryList', function () {

  categories.get = function() {
    if($scope.file){
      return this.categories;
    } else{
      return;
    }
  };

Я хочу иметь возможность использовать $scope.file на моей фабрике вот так...


person zomdar    schedule 22.01.2018    source источник
comment
используйте 1_   -  person Bharadwaj    schedule 22.01.2018
comment
не могли бы вы привести мне пример? не слишком хорошо знаком с тем, как использовать $rootScope   -  person zomdar    schedule 22.01.2018
comment
тот же код, который вы используете, введите $rootScope и проверьте.   -  person Bharadwaj    schedule 22.01.2018
comment
Потрясающие!! работал именно так ... спасибо за помощь   -  person zomdar    schedule 22.01.2018
comment
Нет проблем, удачного кодирования :)   -  person Bharadwaj    schedule 22.01.2018
comment
@Bharadwaj, который просто пропагандирует плохую практику, которую не следует использовать   -  person charlietfl    schedule 22.01.2018
comment
@charlietfl $rootScope существует для этой цели.   -  person Bharadwaj    schedule 22.01.2018
comment
@Bharadwaj нет, это не так, и использование его в качестве хранилища данных является общепризнанной плохой практикой.   -  person charlietfl    schedule 22.01.2018
comment
@charlietfl да, нужно использовать фабрики. Но для небольших данных подойдет $rootScope.   -  person Bharadwaj    schedule 22.01.2018
comment
@Bharadwaj, почему продвижение ленивых хаков приемлемо? Это не то, о чем SO   -  person charlietfl    schedule 22.01.2018
comment
@charlietfl это не плохая практика, это что-то технически законное. К тому же использование rootscope нигде не запрещено. Есть возможность использовать. Поэтому и прокомментировал. Что касается продвижения, настаивал ли я на том, чтобы пользователь использовал rootscope? Места для ответа много, напишите свой   -  person Bharadwaj    schedule 23.01.2018


Ответы (1)


Здесь можно использовать $rootScope, но не используйте его в этом случае. Лучшей практикой является использование службы для хранения данных и управления между различными компонентами. Когда ваше приложение будет расти, может возникнуть проблема с хранением большего количества данных в глобальном $rootScope.

.service('CategoryService', function () {
 this.file = ...
  }

затем реализуйте сервис для контроллера, завода или любого другого места, где вам нужно

.controller('fileCategoryController', function($scope, CategoryService ) {
      $scope.file = CategoryService.file

      if(!CategoryService.file) {
        return;
      } else {
        console.log($scope.file);        
      }
person Helen    schedule 22.01.2018