Angular 组件 - 封装 BehaviorSubject 的输出

A. *_*esa 7 rxjs angular

我有一个具有内部状态的组件,存储在 RxJS 中BehaviorSubject(顺便说一下,包含某个 DOM 元素的大小)。

我想将这个状态公开为一个@Output()属性。

我能想到的最幼稚的实现是这样的:

// inside myComponent

private _state$ = new BehaviorSubject<Something>(...);

@Output() stateChange = new EventEmitter<Something>();

constructor() {
  // skipping unsubscription for the sake of this simplistic example
  this._state$.subscribe(newState => this.stateChange.emit(newState);
}

Run Code Online (Sandbox Code Playgroud)

BehaviorSubject但是,一旦有新订阅,这不会像 a 那样立即发出当前存储的值。迟到的订阅者将无法获得当前的价值。

对于这样的情况有没有简单的方法?我想公开状态并基本上不再担心事件的顺序,就像我对一个简单的BehaviorSubject<T>.

小智 -1

您需要在子组件中更新您的behaviorSubject值,如下所示

this._state$.next(somevalue);

那么behaviorSubject订阅将发出statechange输出装饰器。

参考:https://stackblitz.com/edit/angular-vfjzwh ?file=src%2Fapp%2Fapp.component.html