我在AngularJS 1中,我希望通过引用具有键元素值的对象的值来显示我正在显示的元素的值.
目前我的实现是非常低效的,因为我有两个版本的相同值,作为一个对象数组,另一个作为一个对象(我用它来创建选择元素).
例:
timezonesArrOfObj = {
{ value : "Europe/Dublin", string : "(GMT) Dublin"},
{ value : "Europe/Lisbon", string : "(GMT) Lisbon"},
{ value : "Europe/London", string : "(GMT) London"}
}
timezonesObj = {
"Europe/Dublin" : "(GMT) Dublin",
"Europe/Lisbon" : "(GMT) Lisbon",
"Europe/London" : "(GMT) London"
}
目前,当我想显示值时,我这样做:
{{ timezonesObj[element.Timezone] }}
但是,重用timezonesArrOfObj会更有效,但是如何将正确的键与element.Timezone的值相关联以显示正确的timezonesArrOfObj [(key == element.Timezone的索引)] .string?
顺便说一句,我需要timezonesArrOfObj,因为我想确定select元素中列出时区的顺序.
//编辑
合并来自xSaber的评论和来自Vaibhav的回复,我最终做到了这一点:
.filter('getObjString', function() {
return function(args){
return args.obj[_.findIndex(args.obj, { value : args.val })].string
};
});
和HTML:
{{ { val : element.timezone, obj : timezonesArrOfObj } | getObjString }}
最佳答案 如果您可以使用过滤器,那就太棒了.
如下所示:
app.filter('myFilter', function() {
var timezonesArrOfObj = [
{ value : "Europe/Dublin", string : "(GMT) Dublin"},
{ value : "Europe/Lisbon", string : "(GMT) Lisbon"},
{ value : "Europe/London", string : "(GMT) London"}
];
return function(input, arg){
angular.forEach(timezonesArrOfObj, function(key, value){
if(arg == key.value){
console.log('yes they are equal');
return key;
}
});
};
});
在HTML中:
您只需要在绑定结果的地方使用此过滤器:
{{element.timezone | myFilter}}
我希望这有帮助.如有任何问题,请告诉我.