【发布时间】:2013-03-01 16:00:01
【问题描述】:
我正在努力在 AngularJS 中设置配置文件。是否可以在 AngularJS 中创建一个无法覆盖其密钥的工厂?比如我可以这样设置一个常量,不能被覆盖
module.constant('animals', {"cat": "meow", "dog": "woof"});
但我想做这样的事情,允许覆盖 值,但不允许工厂本身
module.value('catSound','meow')
.value('dogSound','woof')
.factory('animals', ['catSound','dogSound', function(catSound, dogSound) {
return {
"cat": catSound,
"dog": dogSound
}
});
上面的工厂可以被覆盖,允许另一段代码拥有module.factory('animals',function(){ return 7 }) 并破坏一切。但是,作为工厂,各个值可以(并且应该)是可覆盖的,所以我应该能够分配 module.value('catSound','hiss') 并且仍然可以按预期工作。
我尝试过注入常量,但据我所知,这是不可能的。如何防止我的工厂声明被覆盖?我意识到 constant 在描述我想要的东西时可能不是正确的术语,但我确实希望工厂的函数 definition 是常量。
【问题讨论】:
-
您能否提供一些关于您的用例的见解?覆盖工厂提供了很大的好处,例如在模拟测试中。
-
基本上我只是想设置一个可以复制的默认配置文件,并修改其参数以适应各个服务器的需求(即,我们需要一个指向默认情况下开发 API,但在生产服务器上,我们希望它指向生产 API)。想法是将所有配置值保存在一个文件中,以简化默认值的更新,同时防止开发人员意外更改本地配置中的工厂输出。
value()将允许单独更改。我敢肯定有更好的方法 -
您找到解决问题的方法了吗?我现在正在处理同样的问题。
-
没有什么让我特别高兴的。我已将
factory()方法放在全局命名空间下,并正在检查它是否存在。如果命名空间存在,我不再调用工厂方法。
标签: configuration angularjs constants factory