2016-05-06 42 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

不客氣!我認爲這是一個設計選擇。 –