在 Angular 中的整个应用程序中发出和广播事件
Emit and broadcast events throughout application in Angular
有没有办法在 angular2 中发出可以在整个应用程序中收听的事件?就像我们在 AngularJS 中使用 $rootScope.broadcast
和 emit
一样。同样的事情可以在 angular2 中实现吗?我阅读了 @Output()
和 EventEmitter()
并实施了它,但它仅限制 parent 监听由 child 发出的事件。
我了解到 BehaviorSubject
是实现此目的的方法之一。这是正确的做法吗?还有其他解决方案吗?
在 Angular2 中没有全局作用域。只有组件和服务。
对于服务,您可以通过提供它们的地点来定义它们的范围。如果您在 @NgModule({providers: ...})
(或导入的模块)中提供一个,它就可以在全球范围内使用。如果您在组件中提供它,则它仅适用于该组件及其子组件。
有关如何使用共享服务的示例,请参阅 https://github.com/dart-lang/sdk/issues/27637
您还可以发送冒泡 DOM 事件,如
中所示
使用 @Output() someOutput:EventEmitter = new EventEmitter();
发出的事件不会冒泡。
有没有办法在 angular2 中发出可以在整个应用程序中收听的事件?就像我们在 AngularJS 中使用 $rootScope.broadcast
和 emit
一样。同样的事情可以在 angular2 中实现吗?我阅读了 @Output()
和 EventEmitter()
并实施了它,但它仅限制 parent 监听由 child 发出的事件。
我了解到 BehaviorSubject
是实现此目的的方法之一。这是正确的做法吗?还有其他解决方案吗?
在 Angular2 中没有全局作用域。只有组件和服务。
对于服务,您可以通过提供它们的地点来定义它们的范围。如果您在 @NgModule({providers: ...})
(或导入的模块)中提供一个,它就可以在全球范围内使用。如果您在组件中提供它,则它仅适用于该组件及其子组件。
有关如何使用共享服务的示例,请参阅 https://github.com/dart-lang/sdk/issues/27637
您还可以发送冒泡 DOM 事件,如
使用 @Output() someOutput:EventEmitter = new EventEmitter();
发出的事件不会冒泡。