Angular提供程序没有设置值



我已经制作了自己的模块,带有提供程序。我希望其他用户能够覆盖默认配置:

angular.module('mymodule').provider('mymoduleConfig', [function() {
    var object = {
        theme: 'default'
    };
    var updated = {};
    this.setConfig = function(override) {
        console.log('Config updated...', override);
        updated = override;
    }
    return {
        $get: function() {
            return {
                config: angular.extend(object, updated)
            }
        }
    }
}]);

在我自己的应用程序中,我包括mymodule并尝试使用setConfig,但它不会触发。当我调用

angular.module('example', ['mymodule'])
angular.module('example').config(['mymoduleConfigProvider', function(mymoduleConfigProvider) {
    mymoduleConfigProvider.setConfig({
        theme: 'bootstrap'
    });
}]);

setConfig从来没有被调用,但我不知道为什么!

setConfig方法应保留在返回对象之外,而应添加在函数的this上下文中。

那么它可以从配置阶段访问

它不起作用的原因是你显式地从你的提供者返回一个对象,它正在刷新this.setConfig方法,就像你也在该对象中包含$get函数,这就是为什么它在你当前的实现中是可访问的。我建议你不应该从提供者返回对象,你应该创建一个this.$get函数,然后从它分配然后返回对象。

提供者

angular.module('mymodule', []).provider('mymoduleConfig', [function() {
  var object = {
    theme: 'default'
  };
  var updated = {};
  this.setConfig = function(override) {
    console.log('Config updated...', override);
    updated = override;
  }
  this.$get = function() {
    //returning object from `.$get` function
    return {
      config: angular.extend(object, updated)
    }
  }
}]);
工作Plunkr

最新更新