我有一个简单的 ng-repeat,它只显示一半的项目。出于某种原因,我让它可以与 ng-show 一起使用,但不能与 ng-if 一起使用。我不明白为什么?
这个有效:
<li ng-repeat="item in items" ng-show="$index < items.length / 2">{{item}}</li>
这不是:
<li ng-repeat="item in items" ng-if="$index < items.length / 2">{{item}}</li>
这里有一个 jsfiddle 来演示:
http://jsfiddle.net/HB7LU/17269/
本题:AngularJS: ng-if not working in combination with ng-click?没有提供为什么 ng-show 工作而 ng-if 不工作的答案
我猜这是因为 Angular 的优先渲染周期。正如上面有人发布的那样,他们可能已经用更新的版本改变了它的行为。
如果像你这样,我通常会为 ngRepeat 创建一个自定义过滤器来切片数组并根据偏移量(ngRepeat 分页)仅显示指定数量的项目。我从来没有搞砸过将 ngRepeat
直接与 ngIf
或 ngShow/Hide
一起使用,因为无论你如何转动它,它都会被窃听。
ngRepeat
指令创建并附加新的节点元素。
ngShow
将允许 Angular 生成一个元素,但之后它将其显示设置为 none
。
ngIf
不允许 Angular 生成元素。
据我所知,ngIf
的优先级高于 ngRepeat
,因此我可以假设该字段下面发生的事情是:
- Angular sees the array.
- ngIf doesn't know what $index (as it's part of
ngRepeat
) is so its cycle just runs by.
- ngRepeat renders elements.
当 ngShow
工作时:
- Angular sees the array.
- ngRepeat renders elements.
- ngShow shows them by specified condition.