为什么ng-show可以和ng-repeat一起工作,而ng-if不能
Why ng-show works with ng-repeat but ng-if doesn't?
我有一个简单的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>
下面是一个示例来演示:http://jsfiddle.net/HB7LU/17269/
这个问题:AngularJS: ng-if不能和ng-click一起工作?
我猜这是因为Angular的优先级渲染周期。他们可能已经改变了新版本的行为,就像上面有人发布的那样。在像你这样的情况下,我通常为ngRepeat做一个自定义过滤器来切片数组,并根据偏移量(ngRepeat分页)只显示指定数量的项目。我从来没有搞砸使用ngRepeat
直接与ngIf
或ngShow/Hide
,因为它可以得到真正的bug,无论你把它。
-
ngRepeat
指令创建并追加新的节点元素。 -
ngShow
将允许angular生成一个元素,但之后它将把它的显示设置为none
。 -
ngIf
不允许angular生成元素
据我所知,ngIf
的优先级高于ngRepeat
,所以我可以假设字段下面发生的事情是:
- Angular看到了这个数组。
- ngIf不知道$index是什么(因为它是
ngRepeat
的一部分),所以它的循环只是运行。- ngRepeat渲染元素
当ngShow
工作时:
- Angular看到了这个数组。
- ngRepeat渲染元素
- ngShow根据指定的条件显示它们。
相关文章:
- 我需要NG-IF/NG-SWITCH还是NG-SHOW&NG-HIDE
- 如何应用带过滤器的ng if来过滤记录,并在同一页面中显示两个不同的视图
- 在 ng-if 编译后访问指令中的 DOM 元素
- 通过ng-if设置隐藏文本框的值
- AngularJS ng-if指令在移除元素之前,即使条件为false,也会短暂呈现
- 使用 ng-if 时 ng 类的标记行为
- 为什么更改范围获胜'不能在ng if内部工作,而是通过函数调用AngularJS
- 角度 ng-if 子句不能双向工作
- 为什么ng if内部不工作ng重复
- ng单击在使用ng if时停止工作
- AngularJS:在ng-if中输入ng-model不工作
- Ng-if with animated class不能和ng-mouseover一起工作
- 导航在ng-if条件下不工作
- Ng-if不像预期的那样工作
- 将$scope对象传递给ng-if和ng-class三元条件不工作
- 在angular.js中,检测$last的指令不能与ng-if一起工作
- 为什么ng-show可以和ng-repeat一起工作,而ng-if不能
- Ng-if和ng-class-even/odd不能很好地一起工作,也不能得到期望的结果
- Angular ng-if多个条件不工作
- Angular ng-if用于检查空字符串不工作