首页 > 解决方案 > 订阅基类中的行为主题时,Rxjs 订阅不起作用

问题描述

我目前正在使用 Angular 7。

我正在尝试实现一个基本的 http 服务,这样我就可以处理每个错误并显示加载的 gif 完全一样。所以我有一个基础服务,我的所有服务都扩展了;一旦发出 http 请求,我就会更新页面正在加载的行为主题。我订阅了这个BehaviorSubjectapp.component.ts但它从来没有在这里触发。看网上,大家都说我的基础http服务不是单例,我app.component.ts订阅的是基础服务的不同实例。

我在这里创建了一个关于 SlackBlitz 的小例子。

当您单击“更改显示加载”按钮时,我的订阅似乎在BaseServiceService课堂上正常工作,但从未在 app.component 中触发?

我究竟做错了什么?

标签: angularrxjs

解决方案


与单例无关,但关于不同实例的建议是正确的,我将尝试逐步解释。

您在 app.component.ts 构造函数中注入的这两个实例(BaseServiceService、FileServiceService)是不同的并且是独立初始化的,这就是为什么 this.fileService.callBase(); 不会交互/触发 this.baseService.showLoading BehaviourSubject,如果您更改this.baseService.showLoading.subscribe(x => console.log('new val: ' + x));此行,this.fileService.showLoading.subscribe(x => console.log('new val: ' + x));它将按预期工作,现在您可以private baseService: BaseServiceService从构造函数和 BaseServiceService 中删除注入providers: [FileServiceService, BaseServiceService]

----编辑----

我想我明白了你的意图,所以我修改了你的演示。这是链接https://stackblitz.com/edit/angular-r2wv24


推荐阅读