在Angular中,我可以将常量传递给常量吗?
In Angular, can I pass a constant to a constant?
我可以在 angular 中定义一个常数,它本身取决于传递给它的常数吗? Here's a contrived example:
angular
.constant("names", ["Bob", "Jane"])
.constant("friends", ["names", getFriends]);
function getFriends(names) {
var friends = {};
names.forEach(function(name) {
friends[name] = { firstName: name };
});
return friends;
}
所以本质上,names
常量定义了一个名称数组,然后我将其传递给一个函数以生成一堆对象文字。
这段代码肯定行不通 - 但是有没有办法可以实现这种想法?我唯一能想到的就是这样。 ..
var names = ["Bob", "Jane"];
angular
.constant("names", names)
.constant("friends", getFriends())
.controller("myController", MyController);
function getFriends() {
var friends = {};
names.forEach(function(name) {
friends[name] = { firstName: name };
});
return friends;
}
...但我试图避免这种情况(我希望在单独的 JS 文件中定义常量)。
注意:我没有为 friends
使用工厂的原因是因为我希望这两个常量在配置阶段可用。
您可以在模块的 config
阶段进行一些处理,where constants are available:
angular.module('myModule').constant('names', ['Bob', 'Jane']);
angular.module('myModule').constant('friends', {});
angular.module('myModule').config(function(names, friends) {
names.forEach(function(name) {
// Modifying the friends constant
friends[name] = { firstName: name };
});
});
请注意,虽然您无法更改对象常量所引用的内容,但您可以更改对象本身。
看起来答案是肯定的否 - 你不能将常量传递给常量。
我结束了 using a provider instead:
angular
.module("myApp", [])
.constant("names", ["Bob", "Jane"])
.provider("friends", FriendsProvider);
FriendsProvider.$inject = ["names"];
function FriendsProvider(names) {
var self = this;
self.friends = {};
// ----- 8< -----
self.$get = [function() {
return self.friends;
}];
}
我可以在 angular 中定义一个常数,它本身取决于传递给它的常数吗? Here's a contrived example:
angular
.constant("names", ["Bob", "Jane"])
.constant("friends", ["names", getFriends]);
function getFriends(names) {
var friends = {};
names.forEach(function(name) {
friends[name] = { firstName: name };
});
return friends;
}
所以本质上,names
常量定义了一个名称数组,然后我将其传递给一个函数以生成一堆对象文字。
这段代码肯定行不通 - 但是有没有办法可以实现这种想法?我唯一能想到的就是这样。 ..
var names = ["Bob", "Jane"];
angular
.constant("names", names)
.constant("friends", getFriends())
.controller("myController", MyController);
function getFriends() {
var friends = {};
names.forEach(function(name) {
friends[name] = { firstName: name };
});
return friends;
}
...但我试图避免这种情况(我希望在单独的 JS 文件中定义常量)。
注意:我没有为 friends
使用工厂的原因是因为我希望这两个常量在配置阶段可用。
您可以在模块的 config
阶段进行一些处理,where constants are available:
angular.module('myModule').constant('names', ['Bob', 'Jane']);
angular.module('myModule').constant('friends', {});
angular.module('myModule').config(function(names, friends) {
names.forEach(function(name) {
// Modifying the friends constant
friends[name] = { firstName: name };
});
});
请注意,虽然您无法更改对象常量所引用的内容,但您可以更改对象本身。
看起来答案是肯定的否 - 你不能将常量传递给常量。
我结束了 using a provider instead:
angular
.module("myApp", [])
.constant("names", ["Bob", "Jane"])
.provider("friends", FriendsProvider);
FriendsProvider.$inject = ["names"];
function FriendsProvider(names) {
var self = this;
self.friends = {};
// ----- 8< -----
self.$get = [function() {
return self.friends;
}];
}