0Pricing
Angular Academy · レッスン

asyncパイプ

手動でクリーンアップせずにテンプレート内で購読します。

「asyncパイプ」はCoddyKit上の無料Angular Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAngular Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Angular Academyコースには全4レッスンが含まれています。

asyncパイプの役割

asyncパイプは、テンプレート内でObservable(またはPromise)を購読し、最後に発行された値を表示します。また、コンポーネントが破棄されると自動的に購読を解除します。

基本的な使い方

テンプレートでObservableを直接バインドし、asyncを通します。

@Component({
  template: '<p>{{ message$ | async }}</p>'
})
export class HelloComponent {
  message$ = of('Hello from RxJS');
}

asyncでオブジェクトを表示する

発行される値の型は問いません。jsonやdateなど、他のパイプと組み合わせることもできます。

user$ = this.http.get('/api/me');
// template:
// <pre>{{ user$ | async | json }}</pre>

複数回の購読を避ける

asyncを使うたびに購読が作成されます。同じObservableに対して何度も使うと、HTTPリクエストが複数回実行されます。as構文を使って、一度だけ購読してください。

<!-- one subscription, reused as "user" -->
<div *ngIf="user$ | async as user">
  <p>{{ user.name }}</p>
  <p>{{ user.email }}</p>
</div>

新しい制御フローを使う

現在のAngularでは、同じ一度だけ購読するパターンに@ifとasを使います。

@if (user$ | async; as user) {
  <p>{{ user.name }}</p>
  <p>{{ user.email }}</p>
}

待機中はnull

最初の値が発行されるまで、asyncはnullを返します。読み込み状態を明示的に処理してください。

@if (data$ | async; as data) {
  <list [items]="data" />
} @else {
  <p>Loading...</p>
}

手動で購読を解除する必要はない

このパイプは破棄時に自動的に購読を解除するため、メモリリークの原因になる問題の多くを防げます。テンプレートでObservableを扱う際にasyncパイプが推奨される理由です。

Observableを切り替える

バインドされたObservableの参照が変わると、asyncパイプは古いObservableの購読を解除し、新しいObservableを自動的に購読します。

search(term: string) {
  this.results$ = this.http.get('/api/search?q=' + term);
  // async pipe swaps subscriptions for you
}

BehaviorSubjectとasyncパイプ

BehaviorSubjectを使うサービスとasyncパイプを組み合わせると、手動の購読コードなしで、すっきりしたリアクティブUIを構築できます。

// service: readonly count$ = this.subject.asObservable();
// template: <span>{{ count$ | async }}</span>

asyncパイプとtoSignalの比較

どちらも購読を自動的に管理します。asyncパイプはテンプレート内で使い、toSignal()は値をsignalとしてコンポーネントコードに取り込みます。値が必要な場所に応じて選択してください。

import { toSignal } from '@angular/core/rxjs-interop';
user = toSignal(this.http.get('/api/me'));
// template: {{ user()?.name }}

ベストプラクティスのまとめ

コンポーネントで手動購読するより、asyncパイプ(またはtoSignal)を優先してください。重複した購読を避けるにはasを使い、最初のnullや読み込み状態を必ず処理します。

理解度チェック

asyncパイプについての理解度を確認しましょう。

まとめ:Asyncパイプ

asyncパイプはテンプレート内で購読し、破棄時に後処理を行います。

  • as(@ifまたは*ngIfと併用)を使って、一度だけ購読します。
  • 最初の値が発行されるまではnullを返すため、読み込み状態を処理します。
  • テンプレートでは手動購読よりもasyncパイプが推奨されます。

RxJS Fundamentalsを修了しました。

よくある質問

「asyncパイプ」レッスンは無料ですか?

はい。「asyncパイプ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Angular Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Angular Academyコースには全4レッスンが含まれています。

「asyncパイプ」で何を学びますか?

手動でクリーンアップせずにテンプレート内で購読します。 ブラウザで直接実行するハンズオンコードでAngular Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Angular Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAngular Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「asyncパイプ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAngular Academyレッスンでコードを書いて実行できますか?

はい。すべてのAngular Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Observableとサブスクリプション
  2. SubjectとBehaviorSubject
  3. 購読解除とメモリリーク
  4. asyncパイプ
← Angular Academyに戻る