如何检测rxjs中更改的单个变量?

时间:2018-08-19 06:14:15

标签: angular rxjs

我在角度6中使用rxjs

例如,只有一个变量

let a = 1;

我想改变a的任何功能 我认为rxjs可以帮助我 帮助我如何检测更改时间

3 个答案:

答案 0 :(得分:3)

没有RxJS,您可以拥有getter/setter并使用它们来检测更改

private localA = 0;

public get a() {

}

public set a(value) { // new value assigned via this.a = 4

}

setter a中,您可以检测到变量localA所做的任何更改。您只需要使用getter/setter a

this.a = 5

这将运行public set a()函数,您可以在其中编写逻辑。

在ES6中使用getter/setter的示例

const obj = {
   localA: 4,
   get a() {
      return this.localA;
   },
   set a(value) {
      this.localA = value;
      console.log(`localA is changed to ${value}`);
   }
};

obj.a = 5;
obj.a = 6;
console.log(obj.a);

答案 1 :(得分:1)

您可以为此使用Observables:

// Observable string sources

private variableUpdatedSource = new Subject<any>();

// Observable string streams

variableUpdated$ = this.variableUpdatedSource.asObservable();

// Message commands

updateVariable(data: any) {
  this.variableUpdatedSource.next(data);
}

当您要更新变量时,只需调用“ updateVariable”函数,而当您要获取每个更新时,请使用subscribe->

this.variableUpdated$.subscribe(data => { /* what to do with it? */ });

如果只想更改一个,可以执行以下操作:

this.variableUpdated$.pipe(
  take(1),
  tap(data => { /* What do to with result */ })
).subscribe();

答案 2 :(得分:0)

您可以使用设置器功能

private _a = 1;

public get a() {
    return this._a;
}

public set a(val) {
    this._a - val;
    // Do whatever you want in here
}

您仍然可以像以前一样访问a,但是只要您设置一个值(例如this.a = 2),设置器就会被执行。