Angular:在控制器之间共享从工厂返回的数据

时间:2015-04-16 15:41:33

标签: angularjs angular-promise

我有一个工厂调用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然后发送对象以保存通知,但如果我还要保存另一个工厂的另一个文件,该怎么办?怎么做?

1 个答案:

答案 0 :(得分:2)

工厂应该创建对象并将其保存为状态。

控制器应使用工厂的参考资料并为每个人更新。

工厂代码示例:

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

ctrl code sample:

factory.getUser().then(function(res){
   $scope.stateObj = factory.getStateObj();
});