angular - 订阅基类中的行为主题时,Rxjs 订阅不起作用
问题描述
我目前正在使用 Angular 7。
我正在尝试实现一个基本的 http 服务,这样我就可以处理每个错误并显示加载的 gif 完全一样。所以我有一个基础服务,我的所有服务都扩展了;一旦发出 http 请求,我就会更新页面正在加载的行为主题。我订阅了这个BehaviorSubject
,app.component.ts
但它从来没有在这里触发。看网上,大家都说我的基础http服务不是单例,我app.component.ts
订阅的是基础服务的不同实例。
我在这里创建了一个关于 SlackBlitz 的小例子。
当您单击“更改显示加载”按钮时,我的订阅似乎在BaseServiceService
课堂上正常工作,但从未在 app.component 中触发?
我究竟做错了什么?
解决方案
与单例无关,但关于不同实例的建议是正确的,我将尝试逐步解释。
您在 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
推荐阅读
- javascript - 匹配不以特殊字符开头的行中的换行符
- spring - 如何使用 Spring Data Elasticsearch ElasticsearchRepository 突出显示
- html - 为什么我的绝对定位元素不显示指定的背景颜色?
- android - 未找到本机 firebaseURL 的反应
- c# - 将数据插入 SQL 后显示消息未显示
- go - 在多行 Fyne Entry 小部件中捕获 Enter(更一般地,调用“父类”)
- javascript - getBoundingClientRect() 在 angular8 中没有给出函数错误
- python - 如何实现 django 模型到 graphene-django 类型的自定义映射?
- spring-boot - 如何在 Spring Cloud Data Flow 中注册 Spring 批处理
- javascript - Nodejs 导出聚合引发语法错误