一尘不染

angular ng-repeat如果匹配表达式则跳过项目

angularjs

我正在寻找一种基本上告诉angular如果与表达式匹配的话跳过ng-repeat中的项目的方法continue

在控制器中:

$scope.players = [{
    name_key:'FirstPerson', first_name:'First', last_name:'Person'
}, {
    name_key:'SecondPerson', first_name:'Second', last_name:'Person'
}]

现在,在我的模板中,我想向所有人显示不匹配的人name_key='FirstPerson'。我认为它必须是过滤器,所以我设置了一个Plunkr来玩,但没有任何运气。Plunkr尝试


阅读 240

收藏
2020-07-04

共1个答案

一尘不染

正如@Maxim Shoustin所)建议的,实现所需目标的最佳方法是使用自定义过滤器。
但是还有其他方法,其中一种方法ng-if是在放置指令的情况下在同一元素上使用ng- repeat指令(也是,这是plunker):

<ul>
    <li ng-repeat="player in players" ng-if="player.name_key!='FirstPerson'"></li>
</ul>

从美学的角度来看,这可能会带来一个次要的缺点,但是具有一个主要的优点,即您的过滤可以基于与players数组没有那么紧密耦合并且可以轻松访问应用范围内的其他数据的规则:

  <li 
      ng-repeat="player in players" 
      ng-if="app.loggedIn && player.name != user.name"
  ></li>

更新
如上所述,这是针对此类问题 的解决方案 之一,可能会或可能不会满足您的需求。
正如注释中所指出的,它ng-if是一个指令,实际上意味着它在后台可能比您期望的执行更多的操作。
例如,ng-if 从其父级创建一个新范围

ngIf中创建的范围使用原型继承从其父范围继承。

这通常不会影响正常行为,但是为了防止意外情况,在实施之前应牢记这一点。

2020-07-04