2016-05-06 50 views
4

可以使用Output()装饰器从子组件发出事件,以便父组件可以捕获它。我需要的是捕捉任何子组件发出的事件,该子组件不一定是特定组件的直接子组件。通过Angular2中的嵌套组件发送事件

ComponentTwo成为发出事件的组件。如果应用程序具有以下结构:App -> ComponentTwo,那么我们可以轻松捕获由ComponentTwo发出的事件。但如果我们考虑像App -> ComponentOne -> ComponentTwo这样的结构,那么我们不能直接捕获发射器。

这是一个说明问题的plunker

那么有没有办法将传播事件排序到所有父组件?谢谢。

回答

11

没有支持冒泡这种事件。您需要手动捕捉它们并发送给父级。

另一种方法是利用组件树的共享服务并在其中使用可观察/主体。

通过这种方式,所有组件都可以在其上订阅,即使在子子女内也可以通知事件。

constructor(private service: SharedService) { 
    this.service.notifier$.subscribe(
    data => { 
     (...) 
    }); 
} 

的事件将被触发这样:

constructor(private service: SharedService) { 
} 

notify() { 
    this.service.notifier$.next('some data'); 
} 

请参阅此链接了解详情:

+1

谢谢。顺便说一句,由于A2的设计或没有实施(还),没有冒泡? – nakajuice

+0

不客气!我认为这是一个设计选择。 –