更新在rxjs中可观察到的

时间:2020-10-01 14:56:43

标签: angular rxjs

我正在尝试更新值并将其传递到另一个组件中。这是我的服务

  public useCashback = false;

  setUseCashback() {
    console.log(this.useCashback);
    this.useCashback = !this.useCashback;
    console.log(this.useCashback);
  }

  getUseCashback(): Observable<Boolean> {
    return observableOf(this.useCashback);
  }

在我的组件内部,我只需要调用setUseCashback来反转true或false

onUseCashback() {
    this.checkoutService.setUseCashback();
  }

然后在另一个要更新的组件中接收它

  ngOnInit(): void {
      this.useCashback = this.checkoutService
      .getUseCashback()
      .subscribe((response: any) => {
        console.log(response);
        return response;
      });

所以基本上它在setUseCashback内部得到更新,我通过记录useCashback变量看到了这一点,但这在我的组件内部没有响应。

1 个答案:

答案 0 :(得分:0)

您需要使用一个主题使其可观察。在这种情况下,BehaviorSubject允许您使用给定值对其进行初始化。 快速更新您的代码:

public useCashback: BehaviorSubject<boolean> = new BehaviorSubject(false);
setUseCashback(): void {
  const currentUseCashback = this.useCashback.getValue();
  this.useCashback.next(!currentUseCashback);
}
getUseCashback(): Observable<boolean> {
    return this.useCashback.asObservable();
}
 ngOnInit(): void {
    this.checkoutService.getUseCashback().subscribe((useCashback) => {
        this.useCashback = useCashback;
    });

 }