Angular: обмен данными, возвращенными с завода, между контроллерами.

У меня есть конечная точка фабричного вызова HTTP для получения пользователя:

.factory('me', function($resource, VAS_API_URL, $q) {
  return {
    getUser: function() {
      var deferred = $q.defer();
      var url = VAS_API_URL + 'api/me';
      $resource(url)
        .get(function(user) {
          deferred.resolve(user);
        }, function(response) {
          deferred.reject(response);
        });
      return deferred.promise;
    }
  };
})

Я использую этот factory во многих controllers, и я успешно привязываю данные к DOM, но иногда я хочу использовать данные, возвращенные из factory в моем controller, например, чтобы сохранить имя пользователя с уведомлением, поэтому мне пришлось сделать следующее :

.controller('createNotificationCtrl', function($scope, VAS_API_URL, me) {
  var Burl = VAS_API_URL + 'api/notification';

  $scope.profile = me.getUser();
  $scope.profile.then(
    function(user) {
      $scope.owner = user;
      $scope.item = {};
      $scope.item.message = $scope.message;
      $scope.item.owner = $scope.owner.displayName;
    },
    function(response) {
      console.log(response);
    }
  );
})

Мне пришлось создать $scope.item = {}; в фабричном вызове, чтобы я мог получить displayName, а затем отправить объект для сохранения уведомления, но что, если я хочу сохранить также еще один файл с другой фабрики. Как это можно было сделать?


person Ahmad Elmoualem    schedule 16.04.2015    source источник


Ответы (1)


Фабрика должна создать объект и сохранить его как состояние.

Контроллеры должны использовать эталон с завода и обновлять его для всех.

образец заводского кода:

this.stateObj = {};
....
....
this.getUser = function(){
    var promise = $http.get(url);
    promise.then(function(res){
       // update stateObj
    });
    return promise;
}

образец кода ctrl:

factory.getUser().then(function(res){
   $scope.stateObj = factory.getStateObj();
});
person Amir Popovich    schedule 16.04.2015
comment
Но мой вопрос заключался в том, как использовать возвращаемые данные вне области действия фабричного вызова и в пределах области действия контроллера. - person Ahmad Elmoualem; 16.04.2015
comment
Я показал вам, как получить данные из фабрики в этой строке $scope.stateObj = factory.getStateObj();. Теперь все, что вам нужно сделать, это использовать их в своем представлении\контроллере так, как вы хотите. - person Amir Popovich; 17.04.2015