1. ホーム
  2. angular

Angularの不純物入りパイプとは何ですか?

2023-07-10 16:13:51

質問

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

不純物混入パイプが理解できません。

純パイプと不純物入りパイプはどう違うのですか?

簡単で基本的な例で説明してください。

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

純粋なパイプ は、Angularがパイプに渡された値やパラメータの変更を検出したときのみ呼び出されます。

不純なパイプ は、値やパラメータが変更されたかどうかに関係なく、変更検出サイクルごとに呼び出されます。

これは、Angularによって検出されない変更に関連しています。

  • 内容が変更された(しかしまだ同じインスタンスである)配列またはオブジェクトを渡したとき
  • パイプが他の値へのアクセスを得るためにサービスを注入するとき、Angularはそれらが変更されたかどうかを認識しない。

このような場合、おそらくまだパイプを実行させたいと思うでしょう。

不純なパイプは非効率になりがちであることに注意する必要があります。 例えば、フィルタリングやソートなどのためにパイプに配列が渡されると、 変更検出が実行されるたびにこの作業が行われるかもしれません (特にデフォルトの ChangeDetectionStrategy の設定だと特にそうです)、配列が変更されていないにもかかわらず、 変更検出が実行されるたびにこの作業が行われるかもしれません。 パイプはこれを認識し、例えばキャッシュされた結果を返すようにすべきです。