1. ホーム
  2. angularjs

[解決済み] Angular 1.2 の ng-repeat の track by を boolean プロパティでフィルタリングする

2023-07-30 14:56:52

質問

booleanプロパティの値に基づいていくつかのリスト項目をフィルタリングしようとしていますが、何をやってもリスト全体が常に表示されます。私が試したことのいくつかは、何も表示されないほど壊れていましたが、それはここでもなければそこでもありません。私はフィルタリングを希望通りに動作させることができません。

$scope.attendees = [
     {"firstname":"Steve",    "lastname":"Jobs",  "arrived":true,  "id":1}
    ,{"firstname":"Michelle", "lastname":"Jobs",  "arrived":false, "id":2}
    ,{"firstname":"Adam",     "lastname":"Smith", "arrived":true,  "id":3}
    ,{"firstname":"Megan",    "lastname":"Smith", "arrived":false, "id":4}
    ,{"firstname":"Dylan",    "lastname":"Smith", "arrived":false, "id":5}
    ,{"firstname":"Ethan",    "lastname":"Smith", "arrived":false, "id":6}
];

以下のng-repeatによるフィルタリングを使用。

<ul>
    <li ng-repeat="person in attendees track by person.id | filter:arrived:'false'">
            {{person.lastname}}, {{person.firstname}}
    </li>
</ul>

参照できるすべての順列を試したような気がします。そのほとんどは、さまざまな StackOverflow の検索結果から得られたものです。

  • filter:'arrived'
  • filter:arrived
  • filter:'person.arrived'
  • filter:person.arrived
  • filter:{arrived:true}
  • filter:{arrived:'true'}
  • filter:{person.arrived:true}
  • filter:{person.arrived:'true'}

カスタムフィルター関数を作ってみたり。

$scope.isArrived = function(item) {
    return item.arrived;
};

そして、このように適用する。

  • filter:isArrived
  • filter:'isArrived'
  • filter:{isArrived(person)}
  • filter:isArrived(person)
  • filter:'isArrived(person)'

これらのどれも動作しないようです。何が足りないのでしょうか?

以下は、私の問題を実証するplnkrです。 .

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

track byは式の末尾に必要です。

<li ng-repeat="person in attendees | filter: {arrived: false } track by person.id">