如何通过另一个组件中的behaviorsubject获得最后发出的值?

时间:2018-12-26 17:55:15

标签: angular rxjs 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));
  }

在新视图/其他组件中,我获得了默认值,但是我期待更新的值。

我首先获得更新后的值。

请您帮忙!

1 个答案:

答案 0 :(得分:3)

您应该在服务中使用bs = new BehaviorSubject<string>('default value');,并将服务注入到需要的组件中以共享数据。

未在第二个组件中获得新值的原因是,当您离开第二个组件并从第二个组件中获取值的第二个组件时,前一个组件的作用域被破坏了。 BehaviorSubject启动时间。在BehaviorSubject初始化时,所有订阅者都将获得第一个值。

如果您使用服务来执行此操作,则所有组件都可以获取更新后的值。