角度 - 使用常量配方与价值配方

时间:2014-07-28 16:39:51

标签: angularjs

在我阅读here后,我对某事感到好奇:

为什么我会使用value代替constant?由于常量可用,因为值在config阶段也可用

2 个答案:

答案 0 :(得分:5)

  • Value可以在运行时更改,即装饰。
  • Constant已修复 - 无法更改。
angular.module('colors', [])
       .value('favoriteColors', ['red']);

angular.module('main', ['colors']);
       .config(function config($provide) {
           $provide.decorator('favoriteColors', function($delegate) {
               return $delegate.concat(['green']);
           });
       })
       .controller('MainCtrl', function MainController(favoriteColors) {
           console.log('Favorite colors are:', favoriteColors); // red, green
       });

答案 1 :(得分:4)

因为与值相反,常量在控制器,指令等之前被编译和评估。 当你需要提供一些应该可用于控制器,指令以及在编译和评估它们之前的内容时,你应该使用常量配方。

例如,我喜欢使用常量配方,以保持我的应用程序«魔术独角兽字符串»清晰。

<强>更新

基本上,Constant和Value都是使用$ get方法注入单例。这里没什么新鲜的。

两者之间的主要区别在于,虽然Constant是一个可以在任何地方注入的值,但它的值不能在应用程序生命周期的线下更改,因为它不能被装饰器拦截。

这方面的一个例子是,例如PI的价值。您不希望有人更改PI的值,因此在这种情况下,您可以将其定义为常量。

在硬币的另一面,Value是一个简单的可注射值。但是,它与常量不同,因为它可以被注入到任何地方,例如注入配置,但 CAN 被装饰器拦截。

长话短说,如果你想要定义的内容是不可变的,并且你不希望在应用程序的生命周期中更改它,或者如果你需要将该服务注入到配置中,则必须使用常量。另一方面,如果您定义的值会在应用程序的生命周期内发生变化,那么您必须使用Value配方。

希望这有道理,如果不让我知道的话。