如何调用 grand child 组件中的方法
How to call an method in grand child component
我有嵌套组件。当我在 grand parent 组件中按下切换时,我想在 grandchild 组件中调用一个方法。
大 Parent 组件
<div class="col text-right">
Show Values:
<ejs-switch
class="form-control form-control-sm"
(change)="displayGrillsValue($event)"
[checked]=true
></ejs-switch>
</div>
<div class="row">
<div class="col">
<div class="ContentControl">
<app-grills-kpi [isInEdit]="isInEdit" [maxWidth]="'450px'" [maxHeight]="'30px'" [controlName]="ControlName.GrillsKPI1"></app-grills-kpi>
</div>
</div>
<div class="col">
<div class="ContentControl">
<app-grills-kpi [isInEdit]="isInEdit" [maxWidth]="'450px'" [maxHeight]="'30px'" [controlName]="ControlName.GrillsKPI2"></app-grills-kpi>
</div>
</div>
</div>
Parent 分量:
<app-grills-kpi-chart #chart [grillsKPIModel]="grillsKPIModel" [exportName]="formattedKPIName">
</app-grills-kpi-chart>
大 child 组件:
这是我要调用的方法
displayGrillsValue = ($event) => {
this.chart.visibleSeries.forEach(element => {
if($event.checked){
element.marker = this.marker;
}else {
element.marker.dataLabel.visible = $event.checked;
}
});
this.chart.refresh();
}
请指导我最好的方法。另外,如果您注意到我在盛大 parent 中有 2 个图表。因此,当我按下切换按钮时,我希望通过 grand child 方法刷新两个图表。
您可以使用 BehaviorSubject 或 Subject 来触发函数调用
TriggerService.ts
@Injectable()
export class TriggerService{
constructor(){}
private _trigger = new BehaviorSubject<string>('');
castTrigger = this._trigger.asObservable();
trigger(){
this._trigger.next('');
}
}
parent.component.ts
constructor(private triggerService: TriggerService){}
displayGrillsValue(){
this.triggerService.trigger();
}
child.component.ts
constructor(private triggerService: TriggerService){}
ngOnInit(){
this.triggerService.castTrigger.subscribe(data => // grand child component logic here);
}
我有嵌套组件。当我在 grand parent 组件中按下切换时,我想在 grandchild 组件中调用一个方法。
大 Parent 组件
<div class="col text-right">
Show Values:
<ejs-switch
class="form-control form-control-sm"
(change)="displayGrillsValue($event)"
[checked]=true
></ejs-switch>
</div>
<div class="row">
<div class="col">
<div class="ContentControl">
<app-grills-kpi [isInEdit]="isInEdit" [maxWidth]="'450px'" [maxHeight]="'30px'" [controlName]="ControlName.GrillsKPI1"></app-grills-kpi>
</div>
</div>
<div class="col">
<div class="ContentControl">
<app-grills-kpi [isInEdit]="isInEdit" [maxWidth]="'450px'" [maxHeight]="'30px'" [controlName]="ControlName.GrillsKPI2"></app-grills-kpi>
</div>
</div>
</div>
Parent 分量:
<app-grills-kpi-chart #chart [grillsKPIModel]="grillsKPIModel" [exportName]="formattedKPIName">
</app-grills-kpi-chart>
大 child 组件:
这是我要调用的方法
displayGrillsValue = ($event) => {
this.chart.visibleSeries.forEach(element => {
if($event.checked){
element.marker = this.marker;
}else {
element.marker.dataLabel.visible = $event.checked;
}
});
this.chart.refresh();
}
请指导我最好的方法。另外,如果您注意到我在盛大 parent 中有 2 个图表。因此,当我按下切换按钮时,我希望通过 grand child 方法刷新两个图表。
您可以使用 BehaviorSubject 或 Subject 来触发函数调用
TriggerService.ts
@Injectable()
export class TriggerService{
constructor(){}
private _trigger = new BehaviorSubject<string>('');
castTrigger = this._trigger.asObservable();
trigger(){
this._trigger.next('');
}
}
parent.component.ts
constructor(private triggerService: TriggerService){}
displayGrillsValue(){
this.triggerService.trigger();
}
child.component.ts
constructor(private triggerService: TriggerService){}
ngOnInit(){
this.triggerService.castTrigger.subscribe(data => // grand child component logic here);
}