Angular BehaviorSubject returns 设置下一个值后订阅时的初始值

Angular BehaviorSubject returns initial value when subscribing after setting next value

我有以下服务:

export class TestService {

  constructor() { }

  private _schema = new BehaviorSubject("User");
  currentSchema = this._schema.asObservable();

  setSchema(schema: string) {
    this._schema.next(schema);
  }
}

当我订阅可观察对象并在订阅后更改值时,一切正常,但是当我在更改值后订阅另一个组件时,我收到新设置值的初始值。

因此,当我订阅 ngOnInit() 中的可观察对象并在同一组件中设置下一个值时,它会起作用。但是我想在稍后创建的另一个组件中接收下一个值。

我正在使用这样的服务:

ngOnInit() {

    this.testService.currentSchema.subscribe(x => {
      console.log('DETAIL >> ' + x);
    });
}

我不知道为什么会这样,因为 BehaviorSubjects 的意义即使在订阅后也能获得价值。

你可以像这样使用 AsyncSubject 而不是 BehaviorSubject

private _schema = new AsyncSubject();

AsyncSubject 是一个 Subject 变体,其中只有 Observable 执行的最后一个值被发送给它的订阅者

这是一个例子Example

因此您的代码将是

export class TestService {

  constructor() { }

  _schema = new AsyncSubject();


  setSchema(schema: string) {
    this._schema.next(schema);
  }

   getSchema(){
      return this._schema;
  }
}

问题似乎出在组件本身。我从没想过这是组件的问题,所以我尝试了从创建新服务、全新的测试应用程序等所有方法。

当我尝试创建一个新组件以使用那里的服务时,它成功了。我真的无法弄清楚是什么导致了旧组件的问题,我只是将代码 1 到 1 复制到新组件,但它突然起作用了。