如何订阅变量?

OPV*_*OPV 3 rxjs typescript angular

我已声明以下变量:

public filter: IFilterWeekScheduleClassShort = {};
Run Code Online (Sandbox Code Playgroud)

如何订阅更改(监听对象过滤器)?

我试过这个:

private filter: IFilterWeekScheduleClassShort = {};
private filterChanges: BehaviorSubject<IFilterWeekScheduleClassShort> = new BehaviorSubject(this.filter);

this.filterChanges.subscribe((model) => {
    console.log(model);
});
Run Code Online (Sandbox Code Playgroud)

好吗?

我的最终代码:

public _filter: IFilterWeekScheduleClassShort = {};
private filterChanges: BehaviorSubject<IFilterWeekScheduleClassShort> = new BehaviorSubject(this._filter);

  this.filter = {a: 1, b: 2}

  set filter(value: any) {
    this._filter = value;
    this.filterChanges.next(this._filter);
  }

  get filter() {
    return this.filterChanges.asObservable();
  }
Run Code Online (Sandbox Code Playgroud)

订阅:

this.filter.subscribe(model => {
   console.log(model);
});
Run Code Online (Sandbox Code Playgroud)

我从表单中做出的更改:

[(ngModel)]="_filter.teacherId"
Run Code Online (Sandbox Code Playgroud)

小智 7

做一个二传手

private _filter: IFilterWeekScheduleClassShort = {};
set filter(value) {
  this.doSomethingOnVariableChange(value);
  this._filter = value;
}
Run Code Online (Sandbox Code Playgroud)

现在你可以像这样使用它

this.filter = 'x';
Run Code Online (Sandbox Code Playgroud)

并且doSomethingOnVariableChange将调用您的函数'x'.

有一个可观察的:

private _filter: IFilterWeekScheduleClassShort = {};
private _filter$ = new BehaviorSubject(this._filter);
set filter(value) {
  this._filter = value;
  this._filter$.next(this._filter);
}
get filter() {
  return this._filter$.asObservable();
}
Run Code Online (Sandbox Code Playgroud)