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>
我有一个 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":
<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>