首页 > 解决方案 > 在不应用订阅的情况下更新 observable 的值

问题描述

Observable我使用管道订阅 anpairwise以获得以前的和新的值。

但有时我想告诉Observable该值已在未应用该subscribe函数的情况下更新。它将确保previousValue总是更新但不总是应用订阅功能。

// Listen to FomControl -> update value variable.
this.valueChangesSubscription = this.control.valueChanges
    .pipe(startWith(this.defaultValue), pairwise())
    .subscribe(async ([previousValue, newValue]) => {
        // Do something
    });

我更新了的值,formControl有时会发出事件,有时不会:

this.control.setValue(formattedValue, { emitEvent });

但我希望即使没有发出事件,previousValuesubscribe函数也将是真实的previousValue,而不仅仅是最新发出的。

谢谢你。

标签: rxjsangular-formsrxjs-observables

解决方案


可以试试filter算子过滤订阅的结果

private myBooleanValue = false;

// Listen to FomControl -> update value variable.
this.valueChangesSubscription = this.control.valueChanges
    .pipe(
       startWith(this.defaultValue), 
       pairwise(),
       // It will never emit a value to subscribe since its false
       filter(([previousValue, newValue]) => this.myBooleanValue),
     )
    .subscribe(async ([previousValue, newValue]) => {
        // Do something
    });

推荐阅读