如何使用 AJAX 更改服务中的变量? AngularJS

How to change a variable in a service with AJAX? AngularJS

我正在尝试使用 AJAX 引入一些数据,然后在将结果发送到控制器之前对其进行修改。我让这一切都在控制器中工作,但我被告知最好在服务中完成。

app.factory('GameweekJsonFactory', ['$http',function($http){
            var promise;
            var service = {
                async: function() {
                    if ( !promise ) {
                        promise = $http.get('jsons/gameweeks.json').then(function(response){
                    return response.data
                        });
                    }
                return promise;
                }
            }
            return service;
        }]);

然后在另一个工厂中,我想根据 AJAX 调用的响应更改变量的值。 (例如,如果按日期是游戏周 6,我希望 gwk 等于 6)。

app.factory('GameweekFactory',['GameweekJsonFactory',function(GameweekJsonFactory) {
   var gwk;
   var obj = {
       foo: function(){
            GameweekJsonFactory.async().then(function(d){
                //Code here to find out the current gameweek.
                gwk = 6;
                return gwk;
            });
        }
    };
    return gwk;
}]);


controller: function(GameweekFactory){
            console.log('Controller Log '+GameweekFactory)
},

然后如何修改工厂范围内的原始 gwk 变量?我无法解决这个问题,我已经谷歌搜索了很多年!

您没有正确定义工厂。 AngularJS 工厂是 return 一个值的函数,在本例中它是一个具有名为 foo.

方法的对象

Promise 是可链接的。成功回调的值 return 被传递到下一个成功回调。因此,您可以操纵该值(添加 gwk)和 return 该值。

app.factory('GameweekFactory',[
    'GameweekJsonFactory',
    function(GameweekJsonFactory) {
        return {
            foo: function(){
                return GameweekJsonFactory.async().then(function(d){
                    //Code here to find out the current gameweek.
                    d.gwk = 6;
                    return d;
                });
        }
    };
}]);


controller: function(GameweekFactory){
    GameweekFactory.foo().then(function(d){
        console.log('Controller Log '+d.gwk)
    });
}