在Angular中使用事件或RxJS进行服务通信

在Angular中使用事件或RxJS进行服务通信,angular,rxjs,Angular,Rxjs,有两个服务A和B。我想在A中调用特定方法并通知B时触发事件/主题 注意:由于某些限制,我无法从B直接访问A,也无法从A直接访问B 我创建了一个a和B都可以访问的服务C,并在C中定义了一个BehaviorSubject 如果A触发,B可以使用C中的BehaviorSubject(这是我的想法) 问题是BehaviorSubject在组件的生命周期钩子(最好是Ninit()内)中工作 因此,上述方法不起作用。任何建议或方法 这是一个示例:这是一个工作示例,我假设您正在做的事情是您没有注入所有的服务

有两个服务A和B。我想在A中调用特定方法并通知B时触发事件/主题

注意:由于某些限制,我无法从B直接访问A,也无法从A直接访问B

我创建了一个a和B都可以访问的服务C,并在C中定义了一个BehaviorSubject

如果A触发,B可以使用C中的BehaviorSubject(这是我的想法)

问题是BehaviorSubject在组件的生命周期钩子(最好是Ninit()内)中工作

因此,上述方法不起作用。任何建议或方法


这是一个示例:

这是一个工作示例,我假设您正在做的事情是您没有注入所有的服务

在下面的示例中,将发生的事情是,每当您单击按钮
单击
时,您将发送一条通知,通知的内容如下
服务B=>服务C=>服务B和服务a

重要的是,我正在我的app.component中注入
服务A
服务B
,否则如果我不在我的组件中注入
服务A
,服务将受到三次震动,这将导致服务未初始化时的行为,这意味着不会进行
subscribtion

//服务
从“@angular/core”导入{Injectable}”;
从“/c.service”导入{csservice}”;
@可注射({providedIn:“根”})
导出类服务{
构造函数(专用cService:cService){
this.cService.notifications$.subscribe(x=>{
log(x,“服务中的通知”);
});
}
}
//B服务
从“@angular/core”导入{Injectable}”;
从“/c.service”导入{csservice}”;
@可注射({providedIn:“根”})
导出类BService{
构造函数(专用cService:cService){
this.cService.store$.subscribe(x=>{
日志(x,“B服务中的通知”);
});
}
通知(信息){
控制台日志(消息);
this.cService.pushNotificationToSubscribers(消息);
}
}
//C服务
从“@angular/core”导入{Injectable}”;
从“rxjs”导入{BehaviorSubject};
@可注射({providedIn:“根”})
导出类C服务{
store$=新行为主体(空);
通知$=此.store$;
pushNotificationToSubscribers=通知=>{
此.store$.next(通知);
};
}
//应用程序组件,例如使用服务的位置
从“@angular/core”导入{Component}”;
从“/services/a.service”导入{AService};
从“/services/b.service”导入{BService};
@组成部分({
选择器:“我的应用程序”,
模板:“点击我”,
样式URL:[“/app.component.css”]
})
导出类AppComponent{
构造函数(私有bService:bService,私有aService:aService){}
通知(){
此.bService.notify(“新通知”);
}

}
您可以将服务A和B注入服务C?否。。我可以在A和B中注射C