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