【发布时间】:2018-06-14 23:11:40
【问题描述】:
我似乎无法弄清楚问题是什么,
我的服务具有这样的行为主题...
popupSource = new BehaviorSubject<any>('');
popup(component) {
this.popupSource.next(component);
}
然后在我的标题组件中
popupClick() {
this._service.popup('example');
}
然后在我的 header.html 中
<button (click)="popupClick()"></button>
然后在我的应用组件中
ngOnInit() {
this._service.popupSource.subscribe((result) => {
console.log(result);
})
}
所以发生的事情是点击触发了this._service.popup('example');,但它从未点击订阅...
我在每个函数上都设置了断点,它成功到达this.popupSource.next(component),但是什么也没有??每次单击按钮时,我都应该获得控制台日志。
我不确定我做错了什么...为简洁起见,我省略了代码,所以如果您需要更多信息,请告诉我
编辑
我也试过了
private popupSource = new BehaviorSubject<any>('');
getPopup = this.popupSource.asObservable();
popup(component) {
this.popupSource.next(component);
}
而我的应用程序组件中的 getPopup 改为监听
ngOnInit() {
this._service.getPopup.subscribe((result) => {
console.log(result);
})
}
这也不起作用,我无法弄清楚问题是什么......
谢谢
【问题讨论】:
-
你确定你有相同的服务实例吗?你在哪里提供?
-
我有两个单独的模块,一个主模块和一个应用模块,应用组件在 appModule 中,标题组件在 mainModule 中,但我在两个模块中都提供服务,或者我应该导出它在 appModule 中,然后在 mainModule 中从那里抓取它??
-
您不应在两个不同的模块中提供。它为每个模块创建一个实例,这就是它不起作用的原因。
-
@GeoAstronaute 那么我应该如何提供它??
-
@GeoAstronaute 我已将其从 mainModule 的提供程序列表中删除,但它仍然无法正常工作..
标签: javascript angular typescript behaviorsubject