有没有简单的方法在数组中找到一个键并返回其值而不是使用angularjs的键(可能是通过使用表达式)?
现在,我这样做:
vm.topics = [{id:1,value:"a"} , {id:2,value:"b"} , {id:3,value:"c"}];
vm.tickets= [{topic:2,summary:"summary 1"} , {topic:1,summary:"summary 2"}];
vm.getTopicName = function (id) {
for (int t=0 ; t<vm.topics.length ; t++)
if (vm.topics[t].id == id)
return vm.topics[t].value;
return id;
};
和html部分:
<tr data-ng-repeat="item in vm.tickets">
<td>{{vm.getTopicName(item.topic)}}</td>
<td>{{item.summary}}</td>
</tr>
是否有类似
的内容<td>{{item.topic | id as value in vm.topics}}</td>
有趣的例子,但我认为它表明了这一点。
---更新---
正如@jantimon在评论中提到的,一种方法是将列表更改为真实密钥对的对象并简化所有内容:
vm.topics1 = {};
for (var i=0; i < vm.topics.length; i++) {
var t = vm.topics[i];
vm.topics1[t.id] = t.value;
}
和HTML只是改为:
<td>{{vm.topics1(item.topic)}}</td>
答案 0 :(得分:1)
实际上你使用两个不同的数组,并从你的评论(ajax调用)我将在服务中创建合并 topics
和tickets
的新数组,如:
[... ,
{
topic:2,
summary:"summary 1",
ticket_value: "b"
},
... ]
因此控制器应该只绘制它(没有额外的逻辑)。这种方式可以减少ng-repeat
循环中的观察者,并且您不需要调用(重建) getTopicName()
我认为这是一种正确的方式,
为了简化您的示例,如果您使用Underscorejs库,则可以编写:
<td>{{topics[_.findIndex(topics, {id: item.topic})].value}}</td>
中的演示
HTML 的
<div data-ng-repeat="item in tickets">
<td>{{topics[_.findIndex(topics, {id: item.topic})].value}} </td>
</div>
JS
$scope._ = _;
$scope.topics = [{id:1,value:"a"} , {id:2,value:"b"} , {id:3,value:"c"}];
$scope.tickets = [{topic:2,summary:"summary 1"} , {topic:1,summary:"summary 2"}];
**作为旁注,请尽量避免从HTML调用方法,如:
<td>{{vm.getTopicName(item.topic)}}</td>