Javascript 为什么ng show与ng repeat一起工作,而ng if不与';T

Javascript 为什么ng show与ng repeat一起工作,而ng if不与';T,javascript,angularjs,Javascript,Angularjs,我有一个简单的ng重复,只显示一半的项目。出于某种原因,我让它与ng show合作,但不是与ng if合作。我不明白为什么 这项工作: <li ng-repeat="item in items" ng-show="$index < items.length / 2">{{item}}</li> {{item} 这并不是: <li ng-repeat="item in items" ng-if="$index < items.length / 2"

我有一个简单的ng重复,只显示一半的项目。出于某种原因,我让它与ng show合作,但不是与ng if合作。我不明白为什么

这项工作:

<li ng-repeat="item in items" ng-show="$index < items.length / 2">{{item}}</li>
  • {{item}
  • 这并不是:

      <li ng-repeat="item in items" ng-if="$index < items.length / 2">{{item}}</li>
    
  • {{item}
  • 下面是一个要演示的JSFIDLE:


    这个问题:没有提供一个答案,为什么ng show可以工作,而ng if不能工作,我猜这是因为Angular的优先级渲染周期。他们可能已经改变了它的行为与更新的版本,如有人张贴在上面。 在像您这样的情况下,我通常为ngRepeat制作一个自定义过滤器,以对数组进行切片,并根据偏移量(ngRepeat分页)仅显示指定数量的项。我从来没有把
    ngRepeat
    直接与
    ngIf
    ngShow/Hide
    一起使用搞砸过,因为无论你用哪种方式,它都会被真正的窃听

    • ngRepeat
      指令创建并附加新的节点元素
    • ngShow
      将允许angular生成一个元素,但之后它会将其显示设置为
      none
    • ngIf
      不允许angular生成元素
    据我所知,
    ngIf
    ngRepeat
    具有更高的优先级,因此我可以假设字段下面发生的事情是:

    • 角度可以看到阵列
    • ngIf不知道$index是什么(因为它是
      ngRepeat
      的一部分),所以它的循环就这样运行
    • ngRepeat渲染元素
    ngShow
    工作时:

    • 角度可以看到阵列
    • ngRepeat渲染元素
    • ngShow按指定条件显示它们

    可能相关:尝试使用angular 1.01的更高版本,并使用有效的html<代码>不是
    的有效子版本,通过更新角度版本解决了这个问题:虽然我们有机会发言,但你到底为什么要更新这个JSFIDLE 17269次!?除非您想将小提琴与其当前状态共享,否则不要单击“更新”。运行已足够更新小提琴。现在就可以!谢谢所有的回复!