角度表达式从对象数组中的相等属性获取对象的属性

时间:2015-01-22 22:46:25

标签: javascript arrays angularjs angularjs-scope expression

对不好的头衔感到抱歉,无法想到一个合适的头衔。

无论如何,我有一个对象数组,它们都在ng-repeat中列出。然后,我想在另一个对象数组中找到该对象,该对象具有与上面相同的id并获得其另一个属性。

我希望这个示例代码能够简化:

$scope.discussions = [
    {
        recipient: {
            id: 'theid'
        },
        messages: []
    }
];

$scope.friends = [
    {
        id: 'theid',
        online: false
    }

];

在我看来,我有:

<div ng-repeat="discussion in discussions">
    <div>Online = {{//code here}}</div>
</div>

试过两个

ng-class="{online: {{friends.some(fr => fr.id == discussion.recipient._id).online}}; }"

ng-class="{online: friends.some(fr => fr.id == discussion.recipient._id).online }"

1 个答案:

答案 0 :(得分:2)

我的建议是在角度控制器中定义一个函数,该函数可以将discussion$scope.friends中的匹配元素匹配。该函数可能看起来像这样(这可以改进,但它可以完成工作):

$scope.findMatchingId = function (discussion) {
    var matchingFriend;
    $scope.friends.some(function (friend) {
        if (friend.id === discussion.recipient.id) {
            matchingFriend = friend;
            return true;
        }
        return false;
    });
    return matchingFriend;
};

然后在你的html中,你可以在ng-repeat中的元素上调用该函数,如下所示:

<div ng-repeat="discussion in discussions">
     <div>Online = {{findMatchingId(discussion)}}</div>
</div>

请参阅此plnkr