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