【问题标题】:Javascript function is not returning saved value in AngularJSJavascript函数未在AngularJS中返回保存的值
【发布时间】:2015-11-11 20:57:49
【问题描述】:

代码如下:

app.service("dataShareSvc", ['$rootScope', 'parserUIDataModel', function($rootScope, parserUIDataModel) {

    // defaults
    this._parserDataLoad = [];

    return {
        loadParserDataLoad: function (pidId, pidRuleId) {
            parserUIDataModel.listParserRules(pidId, pidRuleId, 'y').then(function(data) {
                this._parserDataLoad = data;
            });
        },
        getParserDataLoad: function () {
            return this._parserDataLoad;
        },
    };

}]);

我遇到的问题是,当我调用 loadParserDataLoad 时,它确实为 this._parserDataLoad 分配了非空值。

但是,当我稍后调用 getParserDataLoad 时,this._parserDataLoad 的值似乎是空数组。中间没有对该变量的操作。为什么会这样?谢谢。

【问题讨论】:

    标签: javascript angularjs closures


    【解决方案1】:

    使用 clousure 修复它:

    app.service("dataShareSvc", ['$rootScope', 'parserUIDataModel', function($rootScope, parserUIDataModel) {
    
        // defaults
    
        this._parserDataLoad = [];
        var that = this;
    
        return {
            loadParserDataLoad: function (pidId, pidRuleId) {
    
                parserUIDataModel.listParserRules(pidId, pidRuleId, 'y').then(function(data) {
                    that._parserDataLoad = data;
                });
            },
            getParserDataLoad: function () {
                return that._parserDataLoad;
            },
        };
    
    }]);
    

    【讨论】:

      【解决方案2】:

      module.service 需要一个构造函数。一般来说,构造函数不应该返回任何东西(是的,我知道有很多例子)。所以你的代码实际上应该是app.factory,而不是app.service

      在调用构造函数时,this 指的是用new 调用构造函数创建的实例。但是你的构造函数返回了一些东西,这本质上意味着实例被丢弃了。这也意味着this._parserDataLoad 完全丢失了。

      最后但并非最不重要的是this._parserDataLoad = data;this 无论如何都指的是完全不同的东西。在这种情况下发给window

      return this._parserDataLoad 也是如此。这里this指的是构造函数返回的对象。

      最简单的解决方法是摆脱this

      var _parserDataLoad = [];
      ...
      _parserDataLoad = data;
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-30
        • 2014-04-01
        • 1970-01-01
        • 2016-05-20
        • 2016-02-04
        • 1970-01-01
        • 1970-01-01
        • 2013-04-26
        相关资源
        最近更新 更多