7

我正在努力在 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')并让事情仍然按预期工作。

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

4

1 回答 1

2

javascript 中的一切都是可变的,所以设置这样的东西很棘手,而且永远不会完全安全。我在角度代码中环顾四周,没有发现任何证据表明您似乎要求使用任何保护机制。

我的建议是忍受风险。除了测试和漂亮的长名称之外,不值得尝试保护自己。我假设你被咬过一次,但我认为机会非常低,除非你用非常短的名称定义工厂。

于 2013-04-29T12:24:29.283 回答