如何在 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>
我的 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()
函数而不是 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
有关更多信息,请查看我的 关于父子组件之间的通信。
我在 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()
函数而不是 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
有关更多信息,请查看我的