0

公式の angular2 pipes documentationの例を見ると、次のことを達成できるかどうか疑問に思います。

    <div [hidden]="hasFlyingHeroes">
      <span>Heroes fly!</span>
    </div>
    <div *ngFor="let hero of (heroes | flyingHeroes)">
      {{hero.name}}
    </div>

ここで、「hasFlyingHeroes」は、flyingHeroes を 2 回除外しないように、ngFor のフィルター処理された値を使用します。

4

1 に答える 1

0

パイプは、関連のないデータ間で共通の動作を共有するためのものです。

特定の振る舞いをするデータの断片は、モデルとして表すことができます。

@Injectable()
class Heroes extends Array {
  getFlying() {
    return this.filter(hero => hero.canFly);
  }

  hasFlying() {
    return !!this.getFlying().length;
  }  
}

<div [hidden]="heroes.hasFlying()">
  <span>Heroes fly!</span>
</div>
<div *ngFor="let hero of heroes.getFlying()">
  {{hero.name}}
</div>

拡張配列で表されるモデルの場合、getFlying2 回呼び出すのが普通です。これは、変更する方法がいくつかあるためです。そのため、フィルター処理されたセットをキャッシュしても何の役にも立ちません。

特定の public メソッド (例: ) によって厳密に変更されたモデルaddの場合、そこでキャッシュを無効にし、フィルター処理されたセットをキャッシュすることが可能で、getFlying一度だけ呼び出されます。

于 2016-08-28T22:45:44.080 に答える