Angular JS ng-如果 ng-repeat 复杂匹配长度大于给定值?

Angular JS ng-if an ng-repeat complex match length is greater than given value?

我有一个 ng-repeat,它显示了一个基于一个循环的 table,然后是一个基于不同循环的单元格:

<tbody>
   <tr ng-repeat="r in roles | limitTo: 30">
     <td>{{r.name}}</td>
     <td>
        <span ng-repeat="t in users100 | limitTo: r.userLimit" ng-if="t.role == r.name"><a href="{{t.id}}">{{t.full_name}}</a></span> 
        <span ng-if="true"><a href="" ng-click="r.userLimit=500">Show all</a></span>
     </td>
   </tr>
 </tbody>

每一行都是一个角色,第一个单元格显示角色的名称。

第二个单元格显示来自不同数据集的所有结果,其中该集合中的 role 与原始集合的 role 值匹配。 (它为每个匹配重复 SPAN,直到 r.userLimit,在 JSON 中设置为 20)

A 标签有一个点击将 r.userLimit 的值设置为 500,因此它显示了所有用户。

我的问题是,如果初始转发器的匹配数大于 r.userLimit (20)

,我只想显示此 link

所以我想

ng-if="((t.role == r.name).length > r.userLimit)"

但是我的语法是错误的,因为 link 从来没有显示过。我的语法有什么问题?

您需要获得 2 个长度:原始数组和过滤后的数组:

这就是你如何使用 ng-repeat:

<span ng-repeat="t in shownUsers = (users100 | limitTo: limit)">

或者,更简单,使用 Angular 1.3:

<span ng-repeat="t in users100 | limitTo: limit as shownUsers">

然后,您将两者与 ng-if 一起用于 "show all"。你也不需要用 "a very high number":

破解 "all"
<span ng-show="shownUsers.length < users100.length" ng-click="limit = users100.length">
   Show All
</span>

作为奖励,这也可以让你很容易做到"show more":

<span ng-show="shownUsers.length < users100.length" ng-click="limit = limit + 10">
   show more
</span>

编辑: 如果结果本身被过滤,则更加复杂,那么 as alias 是不够的。在这种情况下,以下工作(为了便于阅读缩短变量名称):

<span ng-repeat="t in shown = (filtered = (users | filter: {role: r.name}) | limitTo: limit)">

然后,使用 shown.length 对抗 filtered.length:

<span ng-show="shown.length < filtered.length" ng-click="limit = users.length">
   show all
</span>