我有来自 2 个不同 Controller 的 2 个(数组)对象。
对象 1(名称 Controller 1):
[{id:1,"name":"jakov"},...]
对象2(昵称 Controller 2):
[{id:1, "nickname" : "jandric", "nameId" :1, "title" : "master"},...]
我通过服务从 Controller 1 广播对象:
$http.get('names/').success(function(data) {
sharedService.broadcastItem(data);
});
我在 Controller 2 中处理广播对象:
$scope.$on('handleBroadcast', function() {
$scope.names= sharedService.message;
});
Controller 2 也有 GET 请求:
$http.get('nicknames/').success(function (data) {
$scope.nicknames = data;
});
我有一个简单的表格,我想在其中显示:昵称ID、昵称、姓名和头衔。
类似这样的事情:
<div ng-controller="Nickname">
<table>
<tr>
<th>nicknameId</th>
<th>nickname</th>
<th>name</th>
<th>title</th>
</tr>
<tr ng-repeat="nick in nicknames">
<td>{{nick.id}}</td>
<td>{{nick.nickname}}</td>
<td ng-controller="Name">{{??????}}</td> //GET name request trigger
<td>{{nick.title}}</td>
</tr>
</table>
</div>
如何从第二个对象中给定 nameId 的第一个对象获取名称?
请帮忙:D
更新
我设法在 html 中做到这一点,如下所示:
<div ng-controller="Nickname">
<table>
<tr>
<th>nicknameId</th>
<th>nickname</th>
<th>name</th>
<th>title</th>
</tr>
<tr ng-repeat="nick in nicknames">
<td>{{nick.id}}</td>
<td>{{nick.nickname}}</td>
<td ng-controller="Name">
<div ng-repeat="name in names">
<div ng-if="nick.nameId === name.id">
{{name.name}}
</div>
</div>
</td>
<td>{{nick.title}}</td>
</tr>
</table>
</div>
所以我在 for 循环中使用 for 循环。有更简单的答案吗?
最佳答案
我希望我的问题是正确的: 在 Nickname Controller $scope 中创建一个索引,通过 id 映射到名称:
/**
*
* @param {Array.<obj>} source: The array of objects the index should be created with.
* @param {string} property: The property that shall be used as key for the new index
* @return {object} provides access to all objects by the chosen property
*/
var buildIndex = function(source, property) {
var temp = {};
for(var i = 0, len = source.length; i < len; ++i) {
temp[source[i][property]] = source[i];
}
return temp;
};
然后就可以访问模板中的索引了:
<div ng-controller="Nickname">
<table>
<tr>
<th>nicknameId</th>
<th>nickname</th>
<th>name</th>
<th>title</th>
</tr>
<tr ng-repeat="nick in nicknames">
<td>{{nick.id}}</td>
<td>{{nick.nickname}}</td>
<td>{{index[nick.id].name}}</td>
<td>{{nick.title}}</td>
</tr>
</table>
关于javascript - 比较来自不同 Controller 的 2 个 GET 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31021629/