angular-control-flow について
Angular 17以降の開発者向けに、テンプレートの制御フロー構文を扱うリファレンススキルです。条件分岐、ループ、遅延ビューと、従来のディレクティブからの移行を説明します。
主な機能
- 01@if と @else による条件分岐
- 02追跡と空状態に対応する @for
- 03@switch と @case による分岐
- 04@defer によるビューの遅延読み込み
- 05従来の制御フローディレクティブの移行
活用シーン
- 01条件付きテンプレート領域の作成
- 02追跡付きリストと空状態の表示
- 03ビューのオンデマンド読み込み
- 04*ngIf などの旧ディレクティブの変換
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ oguzhan18/ angular-ecosystem-skills --skill angular-control-flowインストール後、Claude Code で/angular-control-flowを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/discussions/_INDEX.mdreferences/docs/_INDEX.mdreferences/issues/_INDEX.mdreferences/releases/_INDEX.md詳細
Angular コントロールフロー
バージョン: Angular 17+(2025) タグ: コントロールフロー、@if、@for、@switch、@defer
API の変更点
このセクションでは、最近のバージョン固有の API の変更点について説明します。
-
新機能:@if は *ngIf を置き換えます — 新しい制御フロー構文です
-
新機能:@for は *ngFor を置き換えます — track を使う新しいループ構文です
-
新機能:@switch は ngSwitch を置き換えます — 新しい switch 構文です
-
新機能:@defer — コンポーネントを遅延読み込みします
-
非推奨:*ngIf、*ngFor、*ngSwitch — 新しい構文に移行してください
ベストプラクティス
- 条件分岐には @if を使用します
@Component({
template: `
@if (isLoggedIn) {
<p>Welcome!</p>
} @else {
<p>Please login</p>
}
`
})
export class MyComponent {
isLoggedIn = signal(false);
}
- @else if を使用します
@Component({
template: `
@if (user.role === 'admin') {
<p>Admin panel</p>
} @else if (user.role === 'user') {
<p>User dashboard</p>
} @else {
<p>Guest view</p>
}
`
})
export class MyComponent {}
- ループには @for を使用します
@Component({
template: `
@for (item of items; track item.id) {
<li>{{ item.name }}</li>
}
`
})
export class MyComponent {
items = [{ id: 1, name: 'A' }, { id: 2, name: 'B' }];
}
- パフォーマンス向上のために track を使用します
@for (user of users; track user.id) {
<li>{{ user.name }}</li>
}
- 空のリストには @empty を使用します
@Component({
template: `
@for (item of items; track item.id) {
{{ item.name }}
} @empty {
<p>No items found</p>
}
`
})
export class MyComponent {}
- 条件分岐には @switch を使用します
@Component({
template: `
@switch (status) {
@case ('loading') {
<p>Loading...</p>
}
@case ('success') {
<p>Success!</p>
}
@case ('error') {
<p>Error occurred</p>
}
@default {
<p>Unknown status</p>
}
}
`
})
export class MyComponent {
status = 'loading';
}
- 遅延読み込みには @defer を使用します
@Component({
template: `
@defer (on viewport) {
<heavy-chart />
} @placeholder {
<div>Loading chart...</div>
}
`
})
export class DashboardComponent {}
- 条件とともに @defer を使用します
@Component({
template: `
@defer (on hover) {
<tooltip />
}
@defer (when isReady) {
<ready-component />
}
`
})
export class MyComponent {}
- *ngIf から移行します
ng generate @angular/core:control-flow
- @if で else を使用します
@if (condition) {
content
} @else {
alternative
}
コメント
Markdown 対応