我已经使用提供商制作了自己的模块。我希望其他用户能够覆盖默认配置:
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
永远不会被调用,但我无法弄明白为什么!
答案 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)
}
}
}]);