我的問題是在 EventEmitter 觸發后回傳父元素時,我的“this”是父級的 EventEmitter 本身,因此我無法訪問屬于父級的任何方法/變數。我做錯了什么,或者它應該如何作業?
也許問題來自動態組件?不確定,因為我認為這是我與其他示例相比的唯一不同之處。似乎正在作業。
我的子組件:
@Input() item: someItem;
@Output() newItemEvent = new EventEmitter<any>();
createElement()
{
this.newItemEvent.emit(this.item);
}
HTML:
<form >
<mat-form-field >
<input matInput placeholder="Name" name="name" type="name" [(ngModel)]="item.name">
</mat-form-field>
<div >
<button mat-raised-button color="primary" type="submit" (click)="createElement()">Create</button>
</div>
</form>
家長:
//create the structure element
create (element)
{
//do something
this.myMethod(element);
}
HTML
<ndc-dynamic
[ndcDynamicInputs]="{item: selectedElement}"
[ndcDynamicComponent]="selectedElement.component"
[ndcDynamicOutputs]="{newItemEvent: create}">
</ndc-dynamic>
這是我的錯誤:
ERROR TypeError: this.myMethod is not a function
at Object.create [as newItemEvent] .....
好吧,這是事件發射器,所以是的,沒有方法“myMethod”。
uj5u.com熱心網友回復:
您將組件類的方法作為引數傳遞給ndcDynamicOutputs.
[ndcDynamicOutputs]="{newItemEvent: create}"
在create方法內部,您可以訪問this.
create() {
this.myMethod()
}
問題是,當您將方法作為引數傳遞時,它不再具有this類的背景關系。this將有另一個價值。所以你在這里有兩個選擇:
第一個是this使用bind函式附加。
getCreateMethod() {
return this.create.bind(this);
}
[ndcDynamicOutputs]="{newItemEvent: getCreateMethod() }">
另一種選擇是重構您的 create 方法,使其無法訪問this,但這可能不可行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/507223.html
