Angular : 在控制器之间共享从工厂返回的数据
Angular : Share data returned from factory between controllers
我有一个工厂调用 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;
}
};
})
我在许多 controllers
中使用了这个 factory
,并且我成功地将数据绑定到 DOM
,但有时我想使用从 [=13] 返回的数据=] 在我的 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
然后发送对象以保存通知但是如果我还想保存另一个工厂的另一个文件怎么办。怎么做到的?
工厂应该创建对象并将其保存为状态。
控制器应该使用工厂的参考并为大家更新。
工厂代码示例:
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();
});
我有一个工厂调用 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;
}
};
})
我在许多 controllers
中使用了这个 factory
,并且我成功地将数据绑定到 DOM
,但有时我想使用从 [=13] 返回的数据=] 在我的 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
然后发送对象以保存通知但是如果我还想保存另一个工厂的另一个文件怎么办。怎么做到的?
工厂应该创建对象并将其保存为状态。
控制器应该使用工厂的参考并为大家更新。
工厂代码示例:
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();
});