Angular 2事件发射器?

时间:2016-05-04 20:22:05

标签: angular angular2-services

  

我是否可以仅在根目录中捕获从叶子组件发出的事件   零件?我没有找到任何相关的信息。

1 个答案:

答案 0 :(得分:1)

实际上,您只能通过父组件中的子组件通知自定义事件。

要实现您的用例,您需要在其providers属性中实现您在根组件中指定的共享服务。这样,它将与此组件及其子组的所有图形共享。

此服务包含可观察/主题。当叶子想要触发事件时,它将利用与此可观察对象或主题相关联的观察者。根组件订阅此observable / subject以获得通知

以下是一个示例实现。首先是服务:

export class EventService {
  subject$: Subject<any> = new Subject();
}

根组件:

@Component({
  (...)
  providers: [ EventService ]
  (...)
})
export class RootComponent {
  constructor(private service:EventService) {
    this.eventService.subject$.subscribe(event => {
      // Execute when the event is received from leaf component
    });
  }
}

叶子成分:

@Component({
  (...)
  template: `
    <div (click)="emitEventToRoot()">Emit event</div>
  `
})
export class LeafComponent {
  constructor(private service:EventService) {
  }

  emitEventToRoot() {
    // Send the event to the root component
    this.eventService.subject$.emit('some event');
  }
}

这些链接可能会让您感兴趣: