如何解决从服务到组件的行为主题订阅问题
How to fix Behavioursubject subscription issue from service to component
我在我的应用程序中使用了 Behavioursubject 我使用异步管道订阅了 Behavioursubject 并且我已经在我的组件中订阅了。
问题:每当我尝试更新 Behavioursubject 中的数据时,数据都会在 Behavioursubject 中更新。组件订阅没有得到更新。在应用程序启动时订阅被执行。基于更改启动后我正在更新服务中的数据服务中的数据正在更新但组件内的订阅没有更新。
我尝试了多种方法,例如将服务注册更改为根模块,但都没有用
这是我的组件代码:
这是调用的方法订阅。
ngOnInit() {
this.getnotifications();
}
getnotifications() {
this.notifications.getjsnotifications('all');
this.notifications.jsnotifications.subscribe(data => {
console.log("came after the update");
this.jsnotifications = data;
});
}
这里是服务代码:
public jsnotifications = new BehaviorSubject(null);
constructor(){
this.getjsnotifications("all");
}
getjsnotifications(type){
this.http.get<Config>(`${environment.JS_API}/jobseeker/notifications/getJobSeekerNotifications?notificationType=`+type).subscribe(data =>{
console.log(data.map.notificationsVo);
this.jsnotifications.next(data.map.notificationsVo);
this.jsnotifications.subscribe(data => {
console.log(data);
})
this.testbehaviour.next(data.map.notificationsVo);
console.log("data updated");
});
}
请帮我解决问题。
提前致谢。
你的代码是正确的,应该可以工作,尽管有以下两个奇怪的事情:
- 在服务中订阅 HTTP 请求是一种奇怪的模式
- HTTP 订阅中的订阅将在每个 HTTP 请求中复制
问题很可能来自您声明服务的方式,这导致创建了两个不同的实例。
请务必使用以下方法中的一种声明您的服务:
- 有了这个注解
@Injectable({ providedIn: 'root' })
- 在根模块的
providers
部分
我在我的应用程序中使用了 Behavioursubject 我使用异步管道订阅了 Behavioursubject 并且我已经在我的组件中订阅了。
问题:每当我尝试更新 Behavioursubject 中的数据时,数据都会在 Behavioursubject 中更新。组件订阅没有得到更新。在应用程序启动时订阅被执行。基于更改启动后我正在更新服务中的数据服务中的数据正在更新但组件内的订阅没有更新。
我尝试了多种方法,例如将服务注册更改为根模块,但都没有用
这是我的组件代码:
这是调用的方法订阅。
ngOnInit() {
this.getnotifications();
}
getnotifications() {
this.notifications.getjsnotifications('all');
this.notifications.jsnotifications.subscribe(data => {
console.log("came after the update");
this.jsnotifications = data;
});
}
这里是服务代码:
public jsnotifications = new BehaviorSubject(null);
constructor(){
this.getjsnotifications("all");
}
getjsnotifications(type){
this.http.get<Config>(`${environment.JS_API}/jobseeker/notifications/getJobSeekerNotifications?notificationType=`+type).subscribe(data =>{
console.log(data.map.notificationsVo);
this.jsnotifications.next(data.map.notificationsVo);
this.jsnotifications.subscribe(data => {
console.log(data);
})
this.testbehaviour.next(data.map.notificationsVo);
console.log("data updated");
});
}
请帮我解决问题。
提前致谢。
你的代码是正确的,应该可以工作,尽管有以下两个奇怪的事情:
- 在服务中订阅 HTTP 请求是一种奇怪的模式
- HTTP 订阅中的订阅将在每个 HTTP 请求中复制
问题很可能来自您声明服务的方式,这导致创建了两个不同的实例。
请务必使用以下方法中的一种声明您的服务:
- 有了这个注解
@Injectable({ providedIn: 'root' })
- 在根模块的
providers
部分