Angularコンポーネント間の通信方法
Angular では、コンポーネント間で以下の方法で通信できます。
- @Input()
例えば、親コンポーネントは子コンポーネントにこのようにデータを渡すことができます。
<app-child [data]="parentData"></app-child>
子コンポーネントでは、親コンポーネントから渡されたデータはこのように受け取ることができます。
@Input() data: any;
- @Output() のネイティブの日本語訳:
- イベントエミッタ
例えば、子コンポーネントはイベントを定義して、それを発火させることができます。
@Output() dataEvent = new EventEmitter<any>();
onClick() {
this.dataEvent.emit(data);
}
親コンポーネントは子コンポーネントのイベントをバインドすることで、子コンポーネントから受け渡されるデータを受け取ることができる。
<app-child (dataEvent)="handleData($event)"></app-child>
親コンポーネントのhandleData()メソッドで、子コンポーネントから受け取ったデータを処理することができます。
- コンポーネント間の通信でサービスを使用する:共有サービスを作成することで、コンポーネントは依存性の注入によってそのサービスにアクセスでき、そのサービスに公開データとメソッドを定義できます。コンポーネントはこのサービスを通じて通信できます。
例えば、共通のサービスを構築します。
@Injectable({
providedIn: 'root'
})
export class DataService {
private dataSubject = new Subject<any>();
data$ = this.dataSubject.asObservable();
sendData(data: any) {
this.dataSubject.next(data);
}
}
データを送信するコンポーネントで、このサービスをインジェクトして、データを送信するにはsendData()メソッドを呼び出してください。
constructor(private dataService: DataService) {}
sendData() {
this.dataService.sendData(data);
}
データを受け取るコンポーネントで、サービスを注入してdata$をsubscribeすることでデータを購読する。
constructor(private dataService: DataService) {}
ngOnInit() {
this.dataService.data$.subscribe(data => {
// 处理接收到的数据
});
}
これらの方法は共通的なコンポーネント間通信においてよく見られますが、実際のシーンやニーズに応じて、適切な方法を選択することが可能です。