使用Ng-Repeat中的函数

时间:2014-08-20 15:49:09

标签: javascript html arrays angularjs angularjs-ng-repeat

我有两个对象数组。一个数组是权限组对象的列表,另一个是用户组列表。我试图弄清楚如何将群组所有者(即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;
}

2 个答案:

答案 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.
}