我不知道这是否是Angular概念中的一个或可能做的,但我有一个调用用户信息的服务(name,id,age,...):
.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;
}
};
})
Run Code Online (Sandbox Code Playgroud)
我在很多地方使用这项服务controllers来获取user数据并使用它与其他http电话一起发送.例如在我的newItemCtrl
.controller('newItemCtrl', function($scope, $http, API_URL, me) {
Run Code Online (Sandbox Code Playgroud)
我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;
})
}
}
Run Code Online (Sandbox Code Playgroud)
在你的控制器中你可以打电话 myService.getMyData()
| 归档时间: |
|
| 查看次数: |
2995 次 |
| 最近记录: |