我正在尝试创建一个共享服务,使用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值。
答案 0 :(得分:0)
我的应用程序有几个子模块,一个共享模块来注册公共组件,以及它们之间的模块。我在共享组件中注册了ModalService
。
我将ModalService移动到最上层(app.module.ts)providers数组的Providers,它按预期工作。
感谢@camaron的提示。自我注意:永远不要在共享模块中注册提供者:)