2016-03-08 50 views
6

我有一個路由配置如何將EventEmitter輸出附加到路由下的組件?

@RouteConfig([ 
    { path: '/', name: 'Start', component: Journal }, 
    { path: '/register', name: 'Register', component: Register }, 
    { path: '/login', name: 'Login', component: Login }, 
    { path: '/settings', name: 'Settings', component: Settings }, 
]) 

我想傾聽來自雜誌的@Output發出的事件。如何才能做到這一點當我在模板中的唯一參考是

<a class="nav-item nav-link" [routerLink]="['Journal']">Journal</a> 

+3

[你不能](https://github.com/angular/angular/issues/4452)。你將不得不使用共享服務。 –

+0

謝謝 - 這就是我結束去的方向 –

+0

@EricMartinez Thnx的鏈接。這太令人沮喪了。如果你有嵌套路由,那麼事件發送器根本沒有用處,所有的都應該使用服務!我正在考慮整合Redux,出於這個特定的原因。雖然我喜歡Angular 2,但它有其侷限性,還應該考慮整合Redux類似的理念。在我的項目中,我傾向於做一些像Redux一樣的事情,在根文件夾中引入服務並在需要時注入它們。 – Michelangelo

回答

0

我意識到現在這已經很老了,但是將狀態傳遞給路由是可撤銷的。這主要是因爲routerLink是通用的,並且可能需要任何數量的潛在的孩子。所以即使你可以傳遞狀態或處理它的事件,你最終也會有不必要的複雜性。

管理父級和子級組件之間狀態的正確方法是shared service。本質上,它歸結爲這些步驟:

  1. 寫一個服務。
  2. 不是從您的模塊提供服務,而是從父組件提供服務(以使外部代碼無法訪問)。
  3. 將服務注入到父項以及任何需要它的子項中。

這與傳遞給孩子的狀態以及從孩子收到的通知並不污染路線設置一樣可行。