javascript - 为什么 ng-show 可以与 ng-repeat 一起使用,而 ng-if 不能?

标签 javascript angularjs

<分区>

我有一个简单的 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 直接与 ngIfngShow/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.

关于javascript - 为什么 ng-show 可以与 ng-repeat 一起使用,而 ng-if 不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32417143/

相关文章:

javascript - selectedOptions 是否损坏或...?

javascript - JS 功能。以时间间隔记录消息

javascript获取子数组长度

javascript - 如何在带有嵌套 JSON 的 ng-repeat 中使用键值对

javascript - 如何在没有插件等的情况下将数据从 select 复制到剪贴板?

javascript - ng 模式仅允许输入文本框中包含 '-'

javascript - (function()) 在哪里?

angularjs - 如何使用 AngularJS 从文本区域的每一行生成一个数组

angularjs - 在 AngularJS 中控制一个 Controller 中的多个 View

javascript - 只是想知道 JavaScript 中的数组是什么类型?