订阅者没有从 .next() 收到值

Bra*_*don 3 rxjs typescript angular

我正在尝试创建一个共享服务来使用 Observable 在组件之间进行通信,使用:http : //blog.angular-university.io/how-to-build-angular2-apps-using-rxjs-observable-data-services -避免陷阱/作为指南:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';


@Injectable()
export class ModalService {

  private _isOpen: BehaviorSubject<boolean> = new BehaviorSubject(false);
  public isOpen: Observable<boolean> = this._isOpen.asObservable();


  openModal() {
    this._isOpen.next(true);
  }

  closeModal() {
    this._isOpen.next(false);
  }

}
Run Code Online (Sandbox Code Playgroud)

在我的组件中,我订阅了isOpen,它在订阅时收到一个值:

. . .

  ngOnInit(): void {
    this.subscription = this.modalService.isOpen.subscribe(state => {
      console.log('`isOpen` in subscription', state);
    });
  }
Run Code Online (Sandbox Code Playgroud)

但是,当我.openModal()在共享服务实例上触发时,订阅者永远不会收到新值。我究竟做错了什么?

我的逻辑是,通过使用行为主题,订阅者将收到一个初始值false,然后我可以更改来自其他具有共享服务实例的组件的单击值。

Bra*_*don 7

我的应用程序有几个子模块和一个共享模块来注册公共组件以及它们之间的模块。我已经ModalService在共享组件中注册了。

我将 ModalService 移动到最上层 (app.module.ts) 提供者数组的 Providers 中,它按预期工作。

感谢@camaron 的提示。自我注意:永远不要在共享模块中注册提供者:)