我不知道这是甚至是Angular概念之一还是可能做到的,但我有一个服务调用用户信息(名称,ID ,年龄,...):Angular.js:如何为所有应用程序控制器调用一次服务
.factory('me', function($resource, API_URL, $q) {
return {
getUser: function() {
var deferred = $q.defer();
var url = API_URL + 'api/me';
$resource(url)
.get(function(user) {
deferred.resolve(user);
}, function(response) {
deferred.reject(response);
});
return deferred.promise;
}
};
})
我用在许多controllers
这个服务来获取user
数据,并用它来与其他http
电话发送。例如在我的newItemCtrl
.controller('newItemCtrl', function($scope, $http, API_URL, me) {
我叫me
服务正如我在许多其他控制器
,我想知道做是有办法只有一次调用此服务和所有的控制器,而不是用它在每个控制器中x次
这种方法可行,但在我看来,将回归设置为一个值,并且只有在该值不存在时才进行调用是一种更好的方法。这归结为关注的分离。服务或工厂的工作是做或得到。你可以说我们甚至滥用do部分,但我离题了。值或常数的工作是保存数据。分开这两个单独的任务将在应用程序变得更大和更复杂时从长远来看付出代价。 – tuckerjt07
我明白user295 ......在说什么,但我不完全明白你在暗示什么。您建议服务设置一个值并检查它,而不是在服务中设置“数据”?为user295 +1 ...顺便说一句,这就是我将如何做到这一点,但我可能是完全错误的。 – VSO
@ tuckerjt07不遵循你所说的话。此服务只进行一次调用,然后存储返回值。我们在一个庞大而复杂的应用中使用这种方法,它运行良好 – user2954587