Angular Observable - 不会捕获多个订阅

Angular Observable - Multiple subscriptions don't get captured

我有一个非常简单的场景,其中包含一个输入字段和一堆根据输入字段中键入的内容进行 API 调用的部分。

现在输入字段本身位于不同的组件中,所以我所做的是在服务中创建一个 behaviorSubject,具有默认值,然后每当用户更改输入字段时,我只需调用服务中的另一个方法在 behaviorSubject 内部调用 next。

然后在我的不同 UI 部分中,我订阅了这个 behaviorSubject 并希望在任何时候检查值更改时进行 API 调用。请注意,每个部分的 API 端点不同,但它们需要同时触发。

但是,我无法让它工作。这是我目前所拥有的

我服务中的代码 changeService.ts:

valueChangedSubject: BehaviorSubject<any>: new BehaviorSubject({});
constructor() {}
valueHasChanged(updatedValue: any) {
  this.valueChangedSubject.next(updatedValue);
}

一个组件中触发事件的代码:

valueChanged(changedVal: string) {
  this.changeService.valueHasChanged({val: changedval});
}

订阅行为主题的组件中的代码:

this.changeService.valueChangedSubject.subscribe((val:any) => {
   console.log('OK I am here ', val);
});

问题是 'Ok I am here' 在刷新时第一次被打印出来,但是在我调用 valueChanged() 方法之后它不会触发 observable。

我知道我在这里遗漏了与 'hot observable' 相关的内容。但是什么以及如何做到这一点?我尝试使用 share() 或 publish() 但无法按预期工作。

BehaviourSubject 是一个热门的可观察对象。热意味着,即使现在有订阅者,可观察对象也会触发新值。我没有发现您在问题中提供的代码有任何问题。看起来不错。

您确定您的 valueChangesSubject 不会随时完成吗?例如,Subject 在处理错误时将完成。

您可以通过在订阅中使用 onCompleted 回调来检查您的 Observable 是否完成。

this.changeService.valueChangedSubject.subscribe(
  next => console.log('OK I am here ', next),
  error => console.error('Error. Observable completes', error),
  () => console.log('Observable completes. No more values will be submitted')
 );