如何将Angular JS服务中的变量设置为AngularJS服务中$ http调用的响应数据?

时间:2015-06-27 00:15:58

标签: javascript angularjs

我有以下服务,我最终想要缓存。但是,我似乎无法弄清楚如何使用Angular中的$ http将服务中的变量设置为来自REST调用的响应数据。

routerApp.service('activityService', function($http) {
    delete $http.defaults.headers.common['X-Requested-With'];

    this.temp = null;

    this.setTemp(x) {
        this.temp = x;
    }

    this.getActivities = function(x) {

        var promise = $http({
            method: 'GET',
            url: 'my url is here...'
        }).then(function(response) {
            //setTemp(response.data); //definitely wont work
            return response.data;
        });

        //how to set temp to response.data???
       setTemp(promise.data); //doesn't work - 
    };
});

我不太清楚JS(或者那个角度)。做这个的最好方式是什么?

1 个答案:

答案 0 :(得分:1)

没有必要缓存角度服务,它保证是单身人士 如果您要缓存响应数据,则将在服务中创建一个缓存对象。

现在关于主要问题。在这段代码中,滥用承诺而不是角度服务。 Promise是异步的,这意味着提供给.then()的回调将在请求完成后的某个时间执行。除.then之外,还会返回另一个承诺,您应该从activityService.getActivities方法返回。

this.getActivities = function(x) {
    var promise = $http({
        method: 'GET',
        url: 'my url is here...'
    }).then(function(response) {
        setTemp(response.data); //meaning that setTemp somehow modifies it's argument
        return response.data;
    });
    return promise;
};

然后在您的某个控制器中,您将使用此服务的方法将.then附加到其返回值。

.controller('someController', function (activityService) {
        activityService.getActivities()
            .then(function (data) {
                    doSomethingWithResponse(data);
                }
        });