【问题标题】:Why update Behaviour Subject function does not work为什么更新行为主题功能不起作用
【发布时间】:2019-07-14 11:05:22
【问题描述】:
updateSubject() {
  this.value = false;
  this.howToUseObservables();
}

当我按下按钮时它会触发此功能,但行为主题没有按预期触发 .next 为什么?

  value = true;
  constructor() {
    this.howToUseObservables().subscribe(ress => alert('in home ' + ress));

  }
  updateSubject() {
    this.value = false;
    this.howToUseObservables();
  }

  updateInOninle(subject: BehaviorSubject<any>) {
    subject.next('from func online');
  }
  updateInOffline(subject: BehaviorSubject<any>) {
    subject.next('from func offline');
  }
  howToUseObservables(): BehaviorSubject<any> {
    const testSubjec: BehaviorSubject<any> = new BehaviorSubject('test');
    if (this.value === true) {
      this.updateInOninle(testSubjec);
    } else {
      this.updateInOffline(testSubjec);

    }
    return testSubjec;
  }

【问题讨论】:

  • 是什么让你说它不起作用?

标签: javascript angular ionic-framework rxjs behaviorsubject


【解决方案1】:

您可能会想,既然您已经 alerted 了来自 howToUseObservables BehaviorSubject&lt;any&gt; 的响应,那么即使单击按钮,它也会运行,并且您每次都可以看到 alert点击按钮。

这不会发生,因为您正在从 howToUseObservables 返回一个新的 BehaviorSubject&lt;any&gt;。因此,除非您将 subscribe 更改为新的 BehaviorSubject,否则您不会看到 in home from func offline 被提醒。

尝试将subscribeing 到updateSubject 中的returned BehaviorSubject,您将看到响应已登录到控制台。

updateSubject() {
  this.value = false;
  this.howToUseObservables()
    .subscribe(ress => console.log('in home ' + ress));
}

这里有一个Working Sample StackBlitz 供您参考。

【讨论】:

  • 是的,它按你的预期工作,但是为什么 constructor() { this.howToUseObservables().subscribe(ress => alert('in home ' + ress)); } 不会触发,因为我已经订阅了 this.howToUseObservables 函数
  • 您正在 subscribe 访问从 howToUseObservables 返回的 BehaviorSubjecthowToUseObservables 每次都会返回一个新的 Observable。这就是为什么你的subscription 在第一次进入你的constructor 后不会触发。
猜你喜欢
  • 2015-10-09
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多