我有一个ng-repeat,它显示一个基于一个循环的表,然后是一个基于不同循环的单元格:
<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)的值
所以我想
ng-if="((t.role == r.name).length > r.userLimit)"
但是我的语法错了,因为链接永远不会显示。我的语法有什么不对?
答案 0 :(得分:0)
您需要获得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
的两个用于&#34;显示所有&#34;。你也不需要破解所有&#34;用&#34;非常高的数字&#34;:
<span ng-show="shownUsers.length < users100.length" ng-click="limit = users100.length">
Show All
</span>
作为奖励,这也可以让您做到更多&#34;非常容易:
<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>