1. ホーム
  2. angularjs

[解決済み] angular ng-repeat 式にマッチした場合、アイテムをスキップする。

2023-02-10 09:54:37

質問

私は、基本的にng-repeatのアイテムが式にマッチする場合、それをスキップするようにangularに指示する方法を探しています、基本的に 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の試み

どのように解決するのですか?

として マキシム・シュスティン が提案するように、あなたが望むことを実現する最良の方法は、カスタムフィルタを使うことでしょう。

しかし、他にも方法はあります。 ng-if ディレクティブを使うことです。 ng-repeat ディレクティブを置いたのと同じ要素で (さらに、ここでは プランカー ):

<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内で作成されたスコープは、プロトタイプ継承を利用して親スコープを継承します。

これは通常、通常の動作には影響しませんが、予期せぬケースを防ぐために、実装する前にこのことを頭に入れておく必要があります。