2

有沒有辦法在angular2中發出可以在整個應用程序中收聽的事件?就像我們在AngularJS中使用$rootScope.broadcastemit一樣。在angular2中可以達到同樣的效果嗎?我閱讀了關於@Output()EventEmitter()並實施了它,但它只限制父母監聽由孩子提供的事件。我讀了BehaviorSubject是做這件事的方法之一。這是正確的方法嗎?任何其他解決方案?在Angular中的應用程序中發射和廣播事件

+3

使用observables似乎是一個很好的選擇:http://stackoverflow.com/questions/34376854/delegation-eventemitter-or-observable-in-angular2/35568924#35568924 – j3r6me

+0

你可以添加一個可觀察到你的父母得到當孩子排出時設置。然後,您可以在任何需要的地方訂閱該觀察點。 –

回答

2

在Angular2中沒有全局範圍。只有組件和服務。

通過服務,您可以根據您提供的地點來定義其範圍。如果您在@NgModule({providers: ...})(或在導入的模塊中)提供了一個,它將變爲全局可用。如果您在某個組件上提供它,則只有該組件及其子組件可用。

有關示例如何使用共享服務見https://github.com/dart-lang/sdk/issues/27637

您也可以派遣冒泡DOM事件一樣顯示在@Output() someOutput:EventEmitter = new EventEmitter();發出in Angular2 how to know when ANY form input field lost focus

事件不泡。

+2

'BehaviorSubject'是一個簡單的方法。鐵桿反應主義者認爲應該避免「主題」。 http://davesexton.com/blog/post/To-Use-Subject-Or-Not-To-Use-Subject.aspx,http://stackoverflow.com/questions/14396449/why-are-subjects-not-推薦在網絡反應擴展所以這是一個固執己見的問題。如果你是rxjs的新手,我建議你使用它,直到你對反應式編程更加舒適,並且能夠爲自己做出決定。 –

+1

感謝Gunter!我會做的。只是想確認我的知識服務是做到這一點的最佳方式嗎? –

+0

服務是**在Angular2中實現它的方法。 –

相關問題