角度提供者没有设置值

时间:2015-08-04 20:36:34

标签: javascript angularjs angularjs-provider

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

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永远不会被调用,但我无法弄明白为什么!

1 个答案:

答案 0 :(得分:0)

setConfig方法应该保留在rerurn对象之外,并且应该在函数的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)
    }
  }
}]);

Working Plunkr