[英]How to populate Angular nested component in ngFor loop?
我在 html 端有一個嵌套組件,如下所示:
<main>
<ng-content *ngFor="let item in data">
<car *ngIf="item.type=='car'"></car>
<plane *ngIf="item.type=='car'"></plane>
</ng-content>
</main>
我的car
和plane
部件都實現了一個基礎車 class。
export abstract class BaseVehicleComponent{
onVehicleCreated(){
console.log("on vehicle created.")
}
}
創建車輛時,我想在main
組件中填充一個事件。
@Component({
selector: 'main',
})
export class MainComponent{
@Output() vehicleCreated = new EventEmitter<void>();
}
hml 更新如下:
<main (vehicleCreated)="onVehicleCreated($event)">
<ng-content *ngFor="let item in data">
<car *ngIf="item.type=='car'"></car>
<plane *ngIf="item.type=='car'"></plane>
</ng-content>
</main>
但基本方法不會觸發。
BaseVehicleComponent
應該有EventEmitter
而不是MainComponent
。
基礎車輛組件:
export abstract class BaseVehicleComponent{
@Output() vehicleCreated = new EventEmitter<void>();
}
MainComponent
應該有onVehicleCreated()
function 而不是BaseVehicleComponent
。
主要組件:
export class MainComponent{
onVehicleCreated(){
console.log("on vehicle created.")
}
}
在car
或plane
組件的ngOnInit()
方法中調用事件發射器的emit()
方法。
this.vehicleCreated.emit();
MainComponent
的模板修改為
<ng-container *ngFor="let item in data">
<car *ngIf="item.type=='car' (vehicleCreated)="onVehicleCreated($event)"></car>
<plane *ngIf="item.type=='plane' (vehicleCreated)="onVehicleCreated($event)"></plane>
</ng-container>
StackBlitz 上的現場演示: https://stackblitz.com/edit/angular-thvzue
有關更多信息,請查看我關於父子組件之間通信的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.