使用 indexOf() 在 ng-repeat 中搜索数组

Using indexOf() to search array inside ng-repeat

我尝试在 ng-repeat 循环中搜索 id 的 [1, 2, 3] 数组和 indexOf(),但可能是因为数据类型错误,它不起作用。

<li ng-repeat="member in message.members">
    Member ID: {{ member.id }}
    <span ng-if="message.read_by.indexOf(member.id) > -1">Read</span>
</li>

数组 message.read_by = [1, 2, 3]member.id = 1 对循环内的每个成员打印正确,但 message.read_by.indexOf(member.id) > -1 总是 returns 错误。

如果我将 member.id 替换为 message.read_by.indexOf(1) > -1 returns true.

我试图在 parseInt()toString() 上传递 member.id 因为它在我看来是一个问题,因为数据类型错误但也不起作用。

传递 member.id 值的正确方法是什么?

您可以使用 track by $index 来达到这个目的:

<li ng-repeat="member in message.members track by $index">
    Member ID: {{ member.id }}
    <span ng-if="$index > 1">Read</span>
</li>

查看 documentation 了解更多信息。

这里的问题是值的数据类型,read_by 数组有 int 值,而 member.id 是字符串。

一个简单的解决方法是

var app = angular.module('my-app', [], function() {})

app.controller('AppController', function($scope) {
  $scope.isRead = function(member) {
    return $scope.message.read_by.indexOf(+member.id) > -1;
  }
  $scope.message = {
    read_by: [1, 2, 3],
    members: [{
      id: "1"
    }, {
      id: "3"
    }, {
      id: "5"
    }]
  };
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="my-app" ng-controller="AppController">
  <ul>
    <li ng-repeat="member in message.members">
      Member ID: {{ member.id }}
      <span ng-if="isRead(member)">Read</span>
    </li>
  </ul>
</div>