7

私はモデルのコレクションを持っています。テンプレートでは、パイプを使用します

<div class="card-panel" *ngFor="let card of cards | sortByType">
    <card-view [card]="card" [autoupdate]="true"></card-view>
</div>

各コンポーネントには、更新データ用のタイマーがあります。しかし、モデルが更新されると、パイプは再び実行されませんでした。この状況でパイプを強制的に実行する方法や、角度のある方法を実行する方法はありますか。

カードビューには、カード変数を更新するタイマーがあります。しかし、Angularはパイプをトリガーするためにこの変更をキャッチしません

4

1 に答える 1

17
  • cardsAngular2 の変更検出が変更を検出し、パイプを再度実行するよりもコピーを作成できます。

  • パイプを不純にすることができます

@Pipe({ name: 'sortByType', pure: false})

これにより、変更検出が実行されるたびにパイプが実行されます。

IterableDiffer を使用してカスタムの変更検出を行い、配列が実際に変更されなかったときにキャッシュされた結果を返すことができます。

このオプションでは、深刻なパフォーマンスの低下を引き起こさないように注意する必要があります。

  • 更新するパイプに追加のパラメーターを渡すことができます (たとえば、配列が変更されるたびに増加する数値など)。

このようにしてパイプが呼び出されるのは、Angular の変更検出が値またはパラメーターが変更されるたびにパイプを呼び出すためです。

デメリットとしては、少し使いづらい点です。

于 2016-10-28T08:55:00.083 に答える