【问题标题】:How to change a variable in a service with AJAX? AngularJS如何使用 AJAX 更改服务中的变量? AngularJS
【发布时间】:2015-09-15 16:07:28
【问题描述】:

我正在尝试使用 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 变量?我无法解决,而且我已经在谷歌上搜索了很长时间!

【问题讨论】:

    标签: javascript ajax angularjs callback


    【解决方案1】:

    您没有正确定义工厂。 AngularJS 工厂是返回值的函数,在这种情况下,它是一个对象,其方法名为 foo

    Promise 是可链接的。成功回调返回的值将传递给下一个成功回调。因此,您可以操作该值(添加 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)
        });
    }
    

    【讨论】:

    • 'TypeError: Cannot read property 'then' of undefined' 在控制器中这样做?为什么 foo 返回未定义?
    • 在别处更改了一些格式,现在可以使用了,非常感谢。
    • 对不起,foo 应该返回承诺继续链。
    猜你喜欢
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    相关资源
    最近更新 更多