我好像搞不懂是什么问题,
我有一项服务有这样的行为主题..。
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);
})
}这也没用,我不知道问题出在哪里.
谢谢
发布于 2018-06-14 23:42:50
这里的问题是,您在两个不同的模块中提供服务,最终得到两个服务实例。如果使用角v6,最简单的方法是在服务中使用providedIn标志:
import { Injectable } from '@angular/core';
@Injectable({providedIn: 'root'})
class myService {}通过这种方式,您不需要在任何模块的提供者数组中提供服务,它将自动在根注入器中提供。
有关这方面的文档可以在这里找到:角度提供者。
如果您使用的是角v5,则只应在您的AppModule中提供服务。
发布于 2018-06-14 23:26:25
在您的服务中,编写如下新方法:
popupSource = new BehaviorSubject<any>('');
getPopupSource() {
return this.popupSource.asObservable();
}而不是直接订阅主题本身。您可以在订阅'asObservable()‘部分时添加它,而不是创建一个全新的方法,但是我喜欢单独的方法,这样我就可以保持主题的私密性,而且我通常在整个应用程序的不同位置多次订阅某个内容,因此减少了重复。
在你的组成部分中:
this._service.getPopupSource().subscribe( result => { etc...})编辑:
发布于 2020-12-03 04:54:42
您可能没有相同的服务实例,我同样的问题是,我为我的服务提供了@Injectable({ providedIn: 'root'}),但是我也把这个服务放在组件提供者[]数组中,只要移除提供者数组,那么它就能工作了。
https://stackoverflow.com/questions/50867132
复制相似问题