@forについて
古いバージョンでは、ngForを使って、テンプレート側でループ処理していましたが、Angular17から@forが新規に使えるようになりました。
基本構文
以下のように、@forを使ってループ処理を使えます。
<ul>
@for (item of items; track item.id) {
<li>{{ item.name }}</li>
}
</ul>
また、@forでは、trackの指定が必須になっています。
trackには、id等の一意になるような値を入れることを推奨しており、これを設定すると、
レンダリングのパフォーマンスが向上するそうです。
コンポーネント側は以下のようなデータを入れてます。
items = [
{id: 1, name: "taro"},
{id: 2, name: "jiro"},
{id: 3, name: "akira"},
{id: 4, name: "yuta"},
]
単純リストの場合のtrack指定値は?
@forではtrackの指定は必須なため、
連想配列でない、単純なリストの場合には、以下のようにforループの値をそのまま入れることで動きます。
<ul>
@for (item of items; track item) {
<li>{{ item }}</li>
}
</ul>
ですが、一意なキーをtrackに指定することを、公式が推奨しているため、
大量データ等でレンダリングが遅いものに関しては、一意なキーをちゃんと設定した方がよさそうです。
リストが空の場合にのみ処理を実行
@forループ処理で、リストが空の場合にのみ処理を実行したいものがあれば、@empty構文が以下のように使えます。
<ul>
@for (item of items; track item) {
<li>{{ item }}</li>
} @empty {
<li>空です</li>
}
</ul>