如何在 ngFor 循环中填充 Angular 嵌套组件?

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>

我的 carplane 组件是在基础车上实现的 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() 函数而不是 BaseVehicleComponent.

主要组件:

export class MainComponent{  
  onVehicleCreated(){
    console.log("on vehicle created.")
  }
}     

carplane组件的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

有关更多信息,请查看我的 关于父子组件之间的通信。