来自订阅的值不会保存在订阅之外

时间:2019-08-15 12:54:42

标签: angular typescript rxjs

我有一个Angular应用程序,我想在服务(位于共享模块中)中保存一组数据以便于访问。我将该数据作为rxjs主题,因此我可以始终获取最新信息。

当我尝试从组件X检索数据时,该组件会导入共享模块(通过服务,我想-服务是在SharedModule中提供的),我在类中声明的任何变量,无论是具有属性的对象还是简单的对象布尔值,订阅结束后,该值将不保留。

我看到,如果组件和服务是同一个功能模块的一部分,那么它会起作用,但是如果它们和服务不是同一功能模块,它将奇怪地停止。

export class X implements OnInit {
   public valueIWantToChange;

constructor(private service: Service) {}

ngOnInit() {
   this.service.dataSubject.subscribe(res => {
      this.valueIWantToChange = res;
      console.log(this.valueIWantToChange) // will show the correct value
})
} //value will be lost here

}

test() { //this is called on a test button just to check the value
   console.log(this.valueIWantToChange); // element is empty
}

---------------------------------
export class Service {

data = new Subject();
dataSubject = this.data.asObservabel();

changeData(value) {
    this.data.next(value); 
}
 }

当我单击html中的T​​est(测试)按钮时,我希望该值是服务中的值,但这没有发生。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

观察者订阅后,Subject需要发出 值。如果您希望在新观察者订阅时重新发射最新值,请尝试使用BehaviorSubject