我不知道这是否是 Angular 概念之一或可能做到的,但我有一项调用用户信息(姓名、id、年龄……)的服务:
.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 次
我一直对服务执行类似的操作,方法是在服务第一次返回后将值设置为服务。现在,一旦在服务中设置了数据,它将返回存储的用户数据,而不是向服务器发出请求。
service('myService', function($q, $http) {
this.data;
var self = this;
this.getMyData = function() {
if (angular.isDefined(self.data)) {
// use $q to return a promise
return $q.when(self.data)
}
return $http.get('myurl').then(function(resp) {
self.data = resp;
})
}
}
在你的控制器中你可以调用myService.getMyData()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)