首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角EventEmitter父级,这等于EventEmitter

角EventEmitter父级,这等于EventEmitter
EN

Stack Overflow用户
提问于 2022-09-12 16:59:12
回答 1查看 30关注 0票数 0

我的问题是,在EventEmitter触发后返回到父元素时,我的"this“就是父元素的EventEmitter本身,因此我无法访问父元素中的任何方法/变量。我是不是做错了什么,或者它应该是这样工作的?

也许这个问题来自于动态组件?不确定,因为我认为这是我唯一的不同,与其他的例子,在这里。好像起作用了。

我的孩子部分:

代码语言:javascript
复制
@Input() item: someItem;
@Output() newItemEvent = new EventEmitter<any>();

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

HTML:

代码语言:javascript
复制
<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>

父级:

代码语言:javascript
复制
  //create the structure element
  create (element)
  {
    //do something
    this.myMethod(element); 
   }

HTML

代码语言:javascript
复制
<ndc-dynamic 
  [ndcDynamicInputs]="{item: selectedElement}" 
  [ndcDynamicComponent]="selectedElement.component" 
  [ndcDynamicOutputs]="{newItemEvent: create}">
</ndc-dynamic>

这是我的错误:

代码语言:javascript
复制
ERROR TypeError: this.myMethod is not a function
  at Object.create [as newItemEvent] .....

嗯,这是事件发射器,所以是的,没有方法"myMethod“。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-12 17:12:01

您将组件类的一个方法作为参数传递给ndcDynamicOutputs

代码语言:javascript
复制
[ndcDynamicOutputs]="{newItemEvent: create}"

create方法中,您可以访问this

代码语言:javascript
复制
create() {
  this.myMethod()
}

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

第一个是使用this函数附加bind

代码语言:javascript
复制
getCreateMethod() {
  return this.create.bind(this);
}
代码语言:javascript
复制
[ndcDynamicOutputs]="{newItemEvent: getCreateMethod() }">

另一种选择是重构您的create方法,这样它就不会访问this,但是这可能不可行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73692748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档