我可以在角度中定义一个常量,它本身取决于传递给它的常量吗? 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
使用工厂的原因是因为我希望在配置阶段可以使用这两个常量。
答案 0 :(得分:0)
您可以在模块的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 };
});
});
请注意,虽然您无法更改对象常量引用的内容,但您可以更改对象本身。
答案 1 :(得分:0)
看起来答案是坚定的否 - 你不能将常数传递给常数。
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;
}];
}