订阅者不会从.next()获得价值

时间:2017-01-26 03:12:15

标签: angular typescript rxjs

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

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);
  }

}

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

. . .

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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