@defer
のデフォルトオプションは、コンポーネントの一部を遅延読み込みするのに優れた選択肢を提供しますが、遅延読み込みの体験をさらにカスタマイズすることが望ましい場合があります。
デフォルトでは、遅延コンテンツはブラウザがアイドル状態のときにロードされます。ただし、トリガーを指定することで、このロードが発生するタイミングをカスタマイズできます。これにより、コンポーネントに最適なロード動作を選択できます。
遅延可能ビューは、2種類のロードトリガーを提供します。
on |
組み込みトリガーのリストからトリガーを使用してトリガー条件を指定します。 例: @defer (on viewport)
|
when |
真偽値として評価される式としての条件です。式が真の場合、プレースホルダーは遅延読み込みされたコンテンツと交換されます。 例: @defer (when customizedCondition)
|
when
条件がfalse
と評価された場合、defer
ブロックはプレースホルダーに戻りません。交換は一度限りの操作です。
複数のイベントトリガーを一度に定義できます。これらのトリガーはOR条件として評価されます。
- 例:
@defer (on viewport; on timer(2s))
- 例:
@defer (on viewport; when customizedCondition)
このアクティビティでは、トリガーを使用して遅延可能ビューをロードする条件を指定する方法を学習します。
-
on hover
トリガーを追加するapp.component.ts
で、@defer
ブロックにon hover
トリガーを追加します。@defer (on hover) { <article-comments />} @placeholder (minimum 1s) { <p>Placeholder for comments</p>} @loading (minimum 1s; after 500ms) { <p>Loading comments...</p>} @error { <p>Failed to load comments</p>}
これで、プレースホルダーにホバーするまで、ページはコメントセクションをレンダリングしなくなります。
-
「すべてのコメントを表示」ボタンを追加する
次に、ラベルが「すべてのコメントを表示」のボタンを含むようにテンプレートを更新します。ボタンに
#showComments
というテンプレート変数を設定します。<button type="button" #showComments>Show all comments</button>@defer (on hover) { <article-comments />} @placeholder (minimum 1s) { <p>Placeholder for comments</p>} @loading (minimum 1s; after 500ms) { <p>Loading comments...</p>} @error { <p>Failed to load comments</p>}
-
on interaction
トリガーを追加するテンプレート内の
@defer
ブロックを更新して、on interaction
トリガーを使用します。interaction
にパラメーターとしてshowComments
テンプレート変数を指定します。<button type="button" #showComments>Show all comments</button>@defer (on hover; on interaction(showComments)) { <article-comments />} @placeholder (minimum 1s) { <p>Placeholder for comments</p>} @loading (minimum 1s; after 500ms) { <p>Loading comments...</p>} @error { <p>Failed to load comments</p>}
これらの変更により、ページは次の条件のいずれかが満たされるまで、コメントセクションのレンダリングを待機します。
- ユーザーがコメントセクションのプレースホルダーにホバーする
- ユーザーが「すべてのコメントを表示」ボタンをクリックする
ページをリロードして、コメントセクションをレンダリングするためのさまざまなトリガーを試すことができます。
詳細については、遅延可能ビューのドキュメントを参照してください。 Angularの優れた機能をさらに活用するために、学習を続けてください。