Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在angular2中将事件从app.component广播到路由器出口_Angular_Rxjs_Angular2 Routing - Fatal编程技术网

如何在angular2中将事件从app.component广播到路由器出口

如何在angular2中将事件从app.component广播到路由器出口,angular,rxjs,angular2-routing,Angular,Rxjs,Angular2 Routing,我创建了一个服务,它有一个流$将发出一个事件,我希望在app.component触发流$emit之后,中的子组件将能够订阅它,但现在的问题是,即使它在构造函数中订阅,订阅回调也不会被触发 我想知道这是否与通过流服务发送事件时不同 最佳实践是什么?最简单的方法是创建事件总线服务: export class EventBusService { bus:Subject<Event> = new Subject<Event>(); dispatch(data:E

我创建了一个服务,它有一个流$将发出一个事件,我希望在app.component触发流$emit之后,
中的子组件将能够订阅它,但现在的问题是,即使它在构造函数中订阅,订阅回调也不会被触发

我想知道这是否与通过流服务发送事件时不同


最佳实践是什么?

最简单的方法是创建事件总线服务:

export class EventBusService
{
    bus:Subject<Event> = new Subject<Event>();

    dispatch(data:Event){
        this.bus.next(data);
    }

    //its up to you how to implement it:
    listen(type:string):Observable<Event> {
        return this.bus.filter(event=>event.type === type);
    }
}
组件构造函数:

constructor(bus:EventBusService){
   bus.dispatch(new Event());
   bus.listen('load').subscribe((e)=>{console.log('loaded');})
}

下面是我对这种服务的实现,它允许在订阅时获取最后第n个值。
constructor(bus:EventBusService){
   bus.dispatch(new Event());
   bus.listen('load').subscribe((e)=>{console.log('loaded');})
}