我不知道這是甚至是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