詳細ガイド
テンプレート構文
パイプ

Observable からデータを取り出す

Observableを使用すると、アプリケーションの各部分間でメッセージを渡すことができます。 Observableは、イベント処理、非同期プログラミング、複数値の処理に使用できます。 Observableは、同期的に(関数が呼び出し元に値を渡すように)、またはスケジュールに従って非同期的に、任意の型の単一値または複数値を提供できます。

組み込みの AsyncPipe を使用して、Observableを入力として受け取り、入力に自動的にサブスクライブします。 このパイプがない場合、コンポーネントコードはObservableの値を使用するためにObservableにサブスクライブし、解決された値を抽出してバインディングのために公開し、Observableが破棄されたときにサブスクライブを解除してメモリリークを防ぐ必要があります。 AsyncPipe は、Observableから値が到着するたびにサブスクリプションを維持し、そのObservableから値を提供し続けるためにコンポーネントの定型コードを節約するパイプです。

次のコード例では、メッセージ文字列 (message$) のObservableを、async パイプを使用してビューにバインドしています。

src/app/hero-async-message.component.ts

      
import {Component} from '@angular/core';import {AsyncPipe} from '@angular/common';import {Observable, interval} from 'rxjs';import {map, startWith, take} from 'rxjs/operators';@Component({  standalone: true,  selector: 'app-hero-async-message',  template: `    <h2>Async Messages and AsyncPipe</h2>    <p>{{ message$ | async }}</p>    <button type="button" (click)="resend()">Resend Messages</button>`,  imports: [AsyncPipe],})export class HeroAsyncMessageComponent {  message$: Observable<string>;  private messages = ['You are my hero!', 'You are the best hero!', 'Will you be my hero?'];  constructor() {    this.message$ = this.getResendObservable();  }  resend() {    this.message$ = this.getResendObservable();  }  private getResendObservable() {    return interval(1000).pipe(      map((i) => `Message #${i + 1}: ${this.messages[i]}`),      take(this.messages.length),      startWith('Waiting for messages...'),    );  }}