Angular 组件通信是 Angular 中一个非常重要的概念,它涉及到组件之间如何相互传递信息和交互。以下是一些常见的 Angular 组件通信方式:
一、属性绑定(单向)
最简单的通信方式就是通过属性绑定将数据从父组件传递到子组件。
- 在父组件中定义一个属性,并将其绑定到子组件的属性上。
- 子组件通过该属性接收数据。
<!-- 父组件 -->
<app-child [childProperty]="parentData"></app-child>
<!-- 子组件 -->
<input [ngModel]="childProperty">
二、事件发射(双向)
事件发射允许子组件向父组件发送消息。
- 子组件通过
@Output()
装饰器定义一个事件。 - 父组件监听该事件,并处理相应的逻辑。
<!-- 父组件 -->
<app-child (childEvent)="handleEvent($event)"></app-child>
<!-- 子组件 -->
<button (click)="emitEvent()">Click Me</button>
<script>
export class ChildComponent {
@Output() childEvent = new EventEmitter<string>();
emitEvent() {
this.childEvent.emit('Data from child');
}
}
</script>
三、服务(单向)
服务可以作为一个中间层,将数据从父组件传递到子组件,或者从子组件传递到父组件。
<!-- 父组件 -->
<app-child [data]="dataFromService"></app-child>
<!-- 子组件 -->
<input [ngModel]="dataFromService">
<!-- 服务 -->
@Injectable()
export class DataService {
private data: string = 'Initial data';
getData(): string {
return this.data;
}
}
四、服务(双向)
如果需要双向通信,可以使用 RxJS 库中的 Observable。
<!-- 父组件 -->
<app-child (dataChange)="onDataChange($event)"></app-child>
<!-- 子组件 -->
<input [ngModel]="dataFromService" (ngModelChange)="emitData($event)">
<!-- 服务 -->
@Injectable()
export class DataService {
private data$: Observable<string>;
constructor() {
this.data$ = new Observable<string>(observer => {
observer.next('Initial data');
});
}
getData(): Observable<string> {
return this.data$;
}
emitData(data: string) {
this.data$.next(data);
}
}
更多关于 Angular 组件通信的信息,可以参考我们的 Angular 组件通信指南。
Angular Component Communication