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

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

本文关键字:变量 AngularJS 服务 何使用 AJAX      更新时间:2023-09-26

我试图使用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工厂是返回值的函数,在这个例子中,它是一个对象,方法名为foo

承诺是可链接的。成功回调返回的值将传递给下一个成功回调。因此您可以操作该值(添加gwk)并返回该值。

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)
    });
}