据我理解文档,Constant和Value之间唯一的具体区别是在应用程序配置阶段可以使用Constant,而Value只能在运行阶段使用。
我很好奇为什么在这种情况下需要值?他们真的只限制常数吗?
答案 0 :(得分:79)
常量可以注入。
装饰器不能截取常量,表示永远不应更改常量的值。
var app = angular.module('app', []);
app.constant('PI', 3.14159265359);
app.config(function(PI){
var radius = 4;
//PI can be injected here in the config block
var perimeter = 2 * PI * radius;
});
app.controller('appCtrl', function(PI) {
var radius = 4;
// calculate area of the circle
var area = PI * radius * radius;
});
值与常量不同,因为值无法注入配置,但是它可以被装饰器拦截。
var app = angular.module('app', []);
app.value('greeting', 'Hello');
app.config(function ($provide) {
$provide.decorator('greeting', function ($delegate) {
return $delegate + ' World!';
});
});
答案 1 :(得分:3)
值与常量之间的差异是在配置阶段使用常量指定的值。
值和常量相同。 常量可在配置阶段使用,而值则不可用。
另一个区别是顾名思义你无法改变常数的值。您分配的第一个值是它保留的值,如果您稍后尝试为其分配不同的值,它将被忽略。
以下是一个例子:
mod.value("myValue", "First Assignment");
mod.value("myValue", "Second Assignment");
mod.constant("myConstant", "First Assignment");
mod.constant("myConstant", "Second Assignment");
mod.controller("MyController", function(myValue, myConstant) {
console.log("myValue: " + myValue);
console.log("myConstant: " + myConstant);
});
控制台输出:
myValue: Second Assignment
myConstant: First Assignment
答案 2 :(得分:0)
但是,请记住,如果您将对象用作常量,则可以随时随地覆盖其值。例如
const version = '10.0'
无法更改,如果您查看控制台,它甚至会在更改其值时抛出错误,但
const config = {
'version': '8.6'
}
表现得像一个简单的值,您可以随时更改对象值,如下所示:
config.version = 5
5
。
同样适用于app.const('constant', 'its me')