在我阅读here后,我对某事感到好奇:
为什么我会使用value
代替constant
?由于常量可用,因为和值在config
阶段也可用
答案 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配方。
希望这有道理,如果不让我知道的话。