更新$ http回调中的服务变量
我正在使用服务在Angular应用程序中使用户数据可用于各种控制器。 我试图弄清楚如何使用$ http服务来更新服务的本地变量(在本例中为“this.users”)。 我尝试过,没有承诺。 服务器正确响应。
我已经阅读了几篇关于如何在服务中使用$ http来更新控制器范围的优秀文章。 最好的是这个:http://sravi-kiran.blogspot.com/2013/03/MovingAjaxCallsToACustomServiceInAngularJS.html。 这并不能帮助我,因为它否定了使用服务的好处。 主要的是,在一个控制器中修改范围不会修改整个应用程序的其余部分。
这是我到目前为止。
app.service('UserService', ['$http', function($http) {
this.users = [];
this.load = function() {
var promise = $http.get('users.json')
.success(function(data){
// this.users is undefined here
console.log(this.users);
}
};
promise.then(function() {
// this.users is undefined here
console.log('this.users');
});
}]);
任何帮助是极大的赞赏。 谢谢。
尝试使用
var users = [];
而不是
this.users = [];
看看是什么
console.log(users);
在这些情况中的每一个的输出。
您的服务奇怪地定义,但如果您有回报,您可以从任何控制器访问它:
app.service('UserService', ['$http', function($http) {
var users = [];
this.load = function() {
var promise = $http.get('users.json')
.success(function(data){
// this.users is undefined here
console.log(users);
users = data.data;
}
};
return {
getUsers: function(){
return users;
}
}
}]);
所以在你的控制器中,你可以使用:
var myUsers = UserService.getUsers();
更新在这里正确使用服务,你的服务应该返回一个承诺,并应该在控制器中访问承诺:下面是我给出的另一个答案的例子
// your service should return a promise
app.service('PickerService', [$http', function($http) {
return {
getFiles: function(){
return $http.get('files.json'); // this returns a promise, the promise is not executed here
}
}
}]);
然后在你的控制器中这样做:
PickerService.getFiles().then(function(returnValues){ // the promise is executed here as the return values are here
$scope.myDirectiveData = returnValues.data;
});
这不再有范围了,你试图用它来做这件事情,而不是:
app.service('UserService', [$http', function($http) {
var users = [];
this.load = function() {
var promise = $http.get('users.json')
.success(function(data){
console.log(users);
}
};
promise.then(function() {
console.log(users);
});
}]);
所有局部变量到服务应该是变量,如果你将它们分配给它作为一个属性,那么每次服务被注入控制器时都会包含这个变量,这是一种不好的做法。
链接地址: http://www.djcxy.com/p/77895.html上一篇: update a service variable within an $http callback
下一篇: dynamic pages, same template, how to access and load article by id