如何从EventEmitter获得响应

时间:2018-03-12 11:07:19

标签: angular typescript eventemitter

我从孩子那里打了一个方法。

在子组件中:

@Output() parentEvent = new EventEmitter<any>();

click1() {
    //calling the method from child
    this.parentEvent.emit(myObj1);    
}

在父组件中:

postMethod1(event) {
    //calling one post method(observable)
}

我需要从子组件调用此postMethod1()方法。但问题是,如果在父级中抛出任何异常,我如何在子组件中处理它?无法得到父母对孩子的回应。我怎么处理这个?

2 个答案:

答案 0 :(得分:0)

要收听eventEmitted,您所要做的就是:

<child-component (parentEvent)='postMethod1($event)'></child-component>

现在每次子组件发出事件时,都会调用postMethod1(),并且发送的数据将作为参数传递给方法。

修改

由于您要处理异常,因此可以使用共享服务来通知子组件。

假设您有shared.service.ts

shared.service.ts中,您可以执行以下操作:

exception : Subject<String> = new Subject<String>();

现在您可以创建一个方法来从父级发送异常:

exceptionRaised(parentException : any){
 this.exception.next(parentException);
}

使用此方法,可以在子组件中订阅异常,如下所示:

child.component.ts

中的

_sharedService.exception.subscribe((exception : any) =>{
  //do whatever you want with the exception
});

要在父级中设置例外, 在parent.component.ts 只需致电_sharedService.exceptionRaised(yourException);

现在,您的父母可以与孩子沟通,并在您遇到例外时通知

答案 1 :(得分:0)

说您孩子的标签为app-child。然后正确的语法是:

<app-child (parentEvent)="postMethod1($event)"></app-child>

编辑对于您的第二个问题,请在父组件中使用ViewChild

export class ParentComponent {
  @ViewChild(ChildComponent) child: ChildComponent;

  // Rest of your code

  postMethod1(event: any) {
    this.myService.makeHttpPost().subscribe(response => null, error => {
      this.child.handleError(error);
    });
  }
}

这会调用子组件中的handleError