如何通过另一个组件中的 behaviorsubject 获取最后发出的值?
How to get the last emitted value through behaviorsubject in another component?
通过使用 behaviorsubject,我能够获得同一组件中的最后一个发射值,但在导航到另一个组件后,我获得默认值(不是最后发射的值)
我使用 BehaviorSubject 更新一个组件中的值,并尝试在另一个组件中获取更新后的值。
第一个组件
bs = new BehaviorSubject<string>('default value');
currentMessage = this.bs.asObservable();
submit(){
this.bs.next('updated value');
this.bs.subscribe(message=> console.log(message));
this.router.navigate(['../new-view']);
}
另一个组件
ngOnInit() {
this.firstComponent.currentMessage.subscribe(message=>
console.log(message));
}
在新的 view/another 组件中我得到了默认值,但是我期待更新的值。
我得到更新值的第一个组件。
你能帮忙吗!
您应该在服务中使用 bs = new BehaviorSubject<string>('default value');
并将该服务注入所需的组件以共享数据。
您没有在第二个组件中获得 新值的原因 是因为当您离开前一个组件的范围并碰巧加载第二个组件时,前一个组件的作用域被破坏了从 BehaviorSubject
启动时间获取值。在您的 BehaviorSubject
初始化时,它的所有订阅者都会获得第一个值。
如果您使用服务来执行此操作,则您的所有组件都可以获得更新后的值。
通过使用 behaviorsubject,我能够获得同一组件中的最后一个发射值,但在导航到另一个组件后,我获得默认值(不是最后发射的值)
我使用 BehaviorSubject 更新一个组件中的值,并尝试在另一个组件中获取更新后的值。
第一个组件
bs = new BehaviorSubject<string>('default value');
currentMessage = this.bs.asObservable();
submit(){
this.bs.next('updated value');
this.bs.subscribe(message=> console.log(message));
this.router.navigate(['../new-view']);
}
另一个组件
ngOnInit() {
this.firstComponent.currentMessage.subscribe(message=>
console.log(message));
}
在新的 view/another 组件中我得到了默认值,但是我期待更新的值。
我得到更新值的第一个组件。
你能帮忙吗!
您应该在服务中使用 bs = new BehaviorSubject<string>('default value');
并将该服务注入所需的组件以共享数据。
您没有在第二个组件中获得 新值的原因 是因为当您离开前一个组件的范围并碰巧加载第二个组件时,前一个组件的作用域被破坏了从 BehaviorSubject
启动时间获取值。在您的 BehaviorSubject
初始化时,它的所有订阅者都会获得第一个值。
如果您使用服务来执行此操作,则您的所有组件都可以获得更新后的值。