Configuration AngularJS“;常数;工厂

Configuration AngularJS“;常数;工厂,configuration,angularjs,constants,factory,Configuration,Angularjs,Constants,Factory,我正在用AngularJS设置配置文件。是否可以在AngularJS中创建一个不能覆盖其密钥的工厂?例如,我可以设置这样一个常量,它不能被覆盖 常数('动物',{“猫”:“喵”,“狗”:“汪”}) 但我想这样做,允许覆盖值,但不允许工厂本身 module.value('catSound','meow') .value('dogSound','woof') .factory('animals', ['catSound','dogSound', function(catSou

我正在用AngularJS设置配置文件。是否可以在AngularJS中创建一个不能覆盖其密钥的工厂?例如,我可以设置这样一个常量,它不能被覆盖

常数('动物',{“猫”:“喵”,“狗”:“汪”})

但我想这样做,允许覆盖值,但不允许工厂本身

module.value('catSound','meow')
      .value('dogSound','woof')
      .factory('animals', ['catSound','dogSound', function(catSound, dogSound) {
            return {
                 "cat": catSound,
                 "dog": dogSound
            }
      });
可以覆盖上面的工厂,允许另一段代码具有
module.factory('anists',function(){return 7})
并破坏所有内容。但是,作为一个工厂,单个值可以(也应该)被覆盖,因此我应该能够分配
module.value('catSound','hiss')
,并使事情仍然按照预期工作


我尝试过注入常量,但据我所知,这是不可能的。如何防止工厂声明被覆盖?我意识到,在描述我想要的东西时,常量可能不是正确的术语,但我确实希望工厂的函数定义是常量。

javascript中的所有内容都是可变的,因此设置类似的内容是很棘手的,而且永远不会完全失效。我在angular代码中查看了一下,没有发现任何证据表明有人试图使用你想要的保护机制


我的建议是承担风险。除了测试和漂亮的长名字之外,保护自己是不值得的。我想你曾经被咬过一次,但我认为机会很低,除非你用很短的名字来定义工厂。

你能对你的用例提供一些见解吗?覆盖工厂提供了巨大的好处,例如在模拟测试中。本质上,我只是尝试设置一个默认配置文件,可以复制并修改其参数以满足各个服务器的需要(即,默认情况下,我们希望API URL指向开发API,但在生产服务器上,我们希望它指向生产API)。其想法是将所有配置值保存在一个文件中,以简化默认值的更新,同时防止开发人员在本地配置中意外更改工厂的输出。
value()
将允许进行个别更改。我确信有更好的方法解决您的问题吗?我目前正在处理相同的问题。没有什么我特别满意的。我已将
工厂()
全局命名空间下的方法,我正在检查其存在性。如果命名空间存在,我不会再次调用工厂方法。已授予,但像
Object.seal()
和setter之类的东西可以提供一定程度的保护。
module.constant()
防止使用同一方法多次覆盖项,因此我希望
module.factory()
定义中已经有类似的内容。@IANHUTER是的,同意。但我认为现在没有任何内容,所以你要么自己做,要么没有。。。