Angular2 + RxJS BehaviorSubject 订阅不适用于所有组件

标签 angular rxjs angular2-services behaviorsubject

我试图在我的组件之间进行某种通信,所以我在组件中使用了一个带有 BehaviorSubject 和 Subscription 的服务,如下所示:

服务(与问题相关的代码):

import { BehaviorSubject } from 'rxjs/BehaviorSubject'

private _clientModalActionSource = new BehaviorSubject<string>('')
modalAction$ = this._clientModalActionSource.asObservable()
public updateClientModalAction(action) {
   this._clientModalActionSource.next(action)
   console.log('sent')
}

组分 A :
this._api.updateClientModalAction(id)

组分 B :
import { Subscription } from 'rxjs/subscription'

private _subscription: Subscription
ngOnInit() { this._subscription = this._api.modalAction$.subscribe(res => {
   this.refreshModal(res)
   console.log('received')
})}

如果组件 B 是组件 A 的子组件,则这完美地工作,但如果 A 是根组件并且 B 在其 <router-outlet> 内(或相反)订阅没有收到任何信息,我只收到 sent在控制台中。

我究竟做错了什么?

最佳答案

好吧,问题比我想象的要简单,我没有在更高级别上使用该服务,我不应该使用 providers: [ApiService]在每个组件中,它应该只在更高的根组件上。

我希望这会帮助某人。

https://github.com/angular/angular/issues/11618#event-790191142

关于Angular2 + RxJS BehaviorSubject 订阅不适用于所有组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39498614/

相关文章:

angular - 如何在 Angular 2 应用程序中配置不同的开发环境

angular - firebase_app__WEBPACK_IMPORTED_MODULE_5__.app(...).functions 不是函数

javascript - 包含还是包含?

Javascript Observable 性能问题

javascript - 如何在 Angular 6 中取消 http 请求?

Angular2 可观察共享不起作用

angular - 通过 Angular 2 中的服务获取和更新字符串

angular - 如何在 Angular 中动态添加额外的路由

angular - 在 Angular 5 中使用 Reactive Forms 时在验证之前标记所需的 formControls

asp.net - 未捕获( promise ): Error: StaticInjectorError[Service]