更新$ 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