0

我用提供者制作了自己的模块。我希望其他用户能够覆盖默认配置:

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但我不知道为什么!

4

1 回答 1

0

setConfig方法应该保留在 rerun 对象之外,并且应该添加到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

于 2015-08-04T20:41:16.893 回答