0

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

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

4

1 回答 1

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“显示全部”一起使用。您也不需要用“非常高的数字”破解“全部”:

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

作为奖励,这也可以让您非常轻松地“显示更多”:

<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>
于 2015-03-28T18:30:07.673 回答