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

Angular 如何通过另一个组件中的behaviorsubject获取最后发出的值?,angular,rxjs,behaviorsubject,Angular,Rxjs,Behaviorsubject,通过使用behaviorsubject,我可以获得同一组件中最后发出的值,但在导航到另一个组件后,我会获得默认值(而不是最后发出的值) 我使用BehaviorSubject更新一个组件中的值,并尝试在另一个组件中获取更新后的值 第一部分 bs = new BehaviorSubject<string>('default value'); currentMessage = this.bs.asObservable(); submit(){ this.bs.next('update

通过使用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']);
  }
在新视图/另一个组件中,我得到了默认值,但我希望得到更新的值

我首先得到更新后的值


你能帮忙吗

您应该使用
bs=newbehaviorsubject(“默认值”),并将服务注入共享数据所需的组件

在第二个组件中未获得新值的原因是,当您离开前一个组件时,前一个组件的作用域被破坏,并且碰巧加载了从
行为主体
启动时间获得值的第二个组件。在初始化
行为主体
时,它的所有订户都会获得第一个值


如果您使用服务来完成此操作,那么您的所有组件都可以获得更新的值。

您应该使用
bs=new BehaviorSubject(“默认值”),并将服务注入共享数据所需的组件

在第二个组件中未获得新值的原因是,当您离开前一个组件时,前一个组件的作用域被破坏,并且碰巧加载了从
行为主体
启动时间获得值的第二个组件。在初始化
行为主体
时,它的所有订户都会获得第一个值


如果您使用服务来完成此操作,则所有组件都可以获得更新的值。

如果组件不处于父子关系,则应使用
服务来在组件之间共享数据。看一看。您可能会发现它很有用。我正在使用first component作为服务,以便将其包含到app.module.ts中的提供程序中。当您通过
asObservable
behavior subject
转换为Observable时,它继承了在订阅时返回最后一个值的行为。@nircraft使用此.firstComponent.bs.subscribe(message=>console.log(message));我认为使用组件作为服务在角度上是一种反模式。除此之外,角分量不是单态的。这意味着,当您导航到另一个组件时,上一个组件将被销毁。因此,我再次建议您使用适当的角度服务来共享数据。如果组件之间不存在父子关系,则应使用
服务来共享数据。看一看。您可能会发现它很有用。我正在使用first component作为服务,以便将其包含到app.module.ts中的提供程序中。当您通过
asObservable
behavior subject
转换为Observable时,它继承了在订阅时返回最后一个值的行为。@nircraft使用此.firstComponent.bs.subscribe(message=>console.log(message));我认为使用组件作为服务在角度上是一种反模式。除此之外,角分量不是单态的。这意味着,当您导航到另一个组件时,上一个组件将被销毁。因此,我再次建议您使用适当的角度服务来共享数据。
ngOnInit() {
    this.firstComponent.currentMessage.subscribe(message=> 
console.log(message));
  }