繁体   English   中英

Angular EventEmitter parent 这等于 EventEmitter

[英]Angular EventEmitter parent This equals with the EventEmitter

我的问题是在 EventEmitter 触发后返回父元素时,我的“this”是父级的 EventEmitter 本身,因此我无法访问属于父级的任何方法/变量。 我做错了什么,或者它应该如何工作?

也许问题来自动态组件? 不确定,因为我认为这是我与其他示例相比的唯一不同之处。 似乎正在工作。

我的子组件:

@Input() item: someItem;
@Output() newItemEvent = new EventEmitter<any>();

createElement()
  {
    this.newItemEvent.emit(this.item);
  }

HTML:

<form class="form">
    <mat-form-field class="form__input">
      <input matInput placeholder="Name"  name="name" type="name"  [(ngModel)]="item.name">
    </mat-form-field>

    <div class="form-actions">
      <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”。

您将组件 class 的方法作为参数传递给ndcDynamicOutputs

[ndcDynamicOutputs]="{newItemEvent: create}"

create方法中,您可以访问this

create() {
  this.myMethod()
}

问题是,当您将方法作为参数传递时,它不再具有来自 class 的this上下文。 this将有另一个价值。 所以你在这里有两个选择:

第一个是使用bind function 附加this

getCreateMethod() {
  return this.create.bind(this);
}
[ndcDynamicOutputs]="{newItemEvent: getCreateMethod() }">

另一种选择是重构您的 create 方法,使其无法访问this ,但这可能不可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM