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

时间:2015-03-28 18:11:04

标签: javascript angularjs angularjs-ng-repeat angular-ng-if

我有一个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值匹配。 (它为每个匹配重复SPANr.userLimit,在JSON中设置为20)

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

我的问题是,我只想显示此链接,如果初始转发器的匹配数大于r.userLimit(20)的值

所以我想

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

但是我的语法错了,因为链接永远不会显示。我的语法有什么不对?

1 个答案:

答案 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>