我是 rxjs 的新手,所以我想问一个关于Angular 2
,Observables
和BehaviorSubject/Subject
.
所以,我想要实现的是:onclick
一个button
里面的一个ComponentA
来通知其他组件,例如ComponentB
,ComponentC
.
到目前为止我所做的是创建一个service
:
private isMenuOpenBS = new BehaviorSubject(false);
toggleMenu(): void {
this.isMenuOpenBS.next(!this.isMenuOpenBS.getValue());
}
getMenuState(): Observable<boolean> {
return this.isMenuOpenBS.asObservable();
}
然后有一个组件provide menuService
调用this.menuService.toggleMenu()
改变 的值BehaviorSubject
。代码 :
toggleMenu(): void {
this.menuService.toggleMenu();
this.menuService.isMenuOpenBS.subscribe(
(data) => {
console.log(data)
},
(e) => {console.log(e)},
() => {console.log('completed')}
)
}
还有另一个组件,OnInit()
subscribes
它getMenuState()
是一个Observable
,但它的值只在OnInit()
. 代码:
ngOnInit(): void {
this.menuService.getMenuState().subscribe(
(data)=>{
this.messages = data;
console.log('nav component');
},
(e) => {console.log(e)},
() => {console.log('completed')}
)
}
该complete
函数永远不会被调用。
有什么想法我做错了什么,或者我在逻辑上遗漏了什么?
--
编辑:所以,为了解释更多问题是我可以看到可观察对象具有 oninit 的第一个值,但没有别的。之后没有错误没有完成,或者没有“下一个”值,这是错误的,因为我从主题发送了新值。最后,问题出在组件的提供者列表上,而不是 observables 或主题的问题,但在解决问题之前,不容易看出问题就在那里。