AngularJS"恒定"工厂

Ian*_*ter 7 configuration factory constants angularjs

我正在设置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
            }
      });
Run Code Online (Sandbox Code Playgroud)

上面的工厂可以被覆盖,允许另一段代码拥有module.factory('animals',function(){ return 7 })并破坏一切.但是,作为工厂,个别值可以(并且应该)可以覆盖,因此我应该能够分配module.value('catSound','hiss')并使事情仍然按预期工作.

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

iwe*_*ein 2

在 JavaScript 中,一切都是可变的,因此设置这样的东西很棘手,而且永远不会完全安全。我环顾了角度代码,没有发现任何证据表明有任何像您所要求的保护机制的尝试。

我的建议是承担风险。除了测试和好听的长名字之外,不值得尝试保护自己。我假设你被咬过一次,但我认为可能性很低,除非你用非常短的名称定义工厂。

  • 当然,但是诸如“Object.seal()”和setter之类的东西可以提供一定程度的保护。`module.constant()` 可以防止使用相同的方法多次覆盖项目,所以我希望 `module.factory()` 定义已经有了类似的东西。 (2认同)