我正在设置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')
并使事情仍然按预期工作。
我已经尝试过注入常量,但据我所知,这是不可能的。如何防止我的工厂声明被覆盖?我意识到常量在描述我想要的东西时可能不是正确的术语,但我确实希望工厂的函数定义是恒定的。
答案 0 :(得分:2)
在javascript中一切都是可变的,所以设置这样的东西是棘手的,永远不会完全失败。我在角度代码中四处查看,发现没有任何证据证明你似乎要求保护机制。
我的建议是忍受风险。除了测试和漂亮的长名之外,不值得尝试保护自己。我假设你曾被咬过一次,但我认为机会很低,除非你定义工厂的名字很短。