我有两个对象数组。一个数组是权限组对象的列表,另一个是用户组列表。我试图弄清楚如何将群组所有者(即70)与匹配ID的用户列表进行比较。
Groups数组(ReportModel.report)的结构如下:
[{
name: Admin,
id: 71,
description: Important Group,
owner: 70,
ownerIsUser: True
}]
User数组(ReportModel.users)的结构如下:
[{
name: All Users (windows),
id: 70,
domain: c:0!.s|windows,
email: ,
isAdmin: False
}]
使用组对象数组,我显示表中的所有组。
HTML:
<tr ng-repeat="group in ReportModel.report" on-finish-render
<td>{{group.id}}</td>
<td>{{group.description}}</td>
<td>{{group.owner}}</td>
<td><td>{{getOwner(group.owner)}}</td></td> //I'm trying to get this cell to display "All Users (windows)"
<td>{{group.ownerIsUser}}</td>
</tr>
我找到了一个执行ID查找的函数,并返回了我可以从中提取名称的正确用户对象,但是我无法弄清楚如何在ng-repeat中的视图中调用此函数并返回正确的名称
这是我的controller:
function loadUsers(){
UserService.loadUsers().then(function (data){
console.log('getting users');
$scope.ReportModel.users = data; })
}
function findById (source, id) {
return source.filter(function( obj ) {
// coerce both obj.id and id to numbers
// for val & type comparison
return +obj.id === +id;
})[ 0 ];
}
$scope.getOwner = function (ownerID) {
console.log('get owner called', ownerID);
var owner = findById($scope.ReportModel.users, ownerID);
console.log(owner.name);
return owner.name;
}
答案 0 :(得分:0)
您在控制器中使用finById函数的方法是正确的。你不能从你的html中调用它的原因是因为该方法没有绑定到你的范围。将控制器中的功能定义更改为:
$scope.findById = function(source, id) {
return source.filter(function( obj ) {
// coerce both obj.id and id to numbers
// for val & type comparison
return +obj.id === +id;
})[ 0 ];
}
答案 1 :(得分:0)
只是让我的评论成为答案。
您可以使用任何可以针对绑定范围进行验证的表达式。所以在你的情况下你可以这样做: -
<td><td>{{getOwner(group.owner)}}</td></td>
来自迭代组的group.owner并从范围调用getOwner函数。
并在您的范围内: -
$scope.getOwner = function (owner) {
//Your logic that returns the owner.
}