【问题标题】:Updating value of an observable without applying the subscribe在不应用订阅的情况下更新 observable 的值
【发布时间】:2021-06-02 16:35:22
【问题描述】:

我订阅了带有pairwise 管道的Observable,以获得以前的和新的值。

但有时我想告诉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 });

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

谢谢。

【问题讨论】:

    标签: rxjs angular-forms rxjs-observables


    【解决方案1】:

    你可以试试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
        });
    

    【讨论】:

    • 谢谢,但这永远不会用到subscribe 函数。我想要的是'emitWithSubscribeAppliedemitWithoutSubscribeApplied 类型的函数。我已经搜索了一种在事件旁边传递元数据的方法,但这似乎不可行。
    • 如果你把myBooleanValue的值改成true,会有什么问题?
    • 我无法控制formControl 的每一个值变化。我不想错过一个事件,因为几乎同时发出了 2 个事件:一个以编程方式,一个通过用户操作(在输入中键入文本,...)。如果我在以编程方式发射时将布尔值设置为 false 并且在调用“用户事件”之前不将其重置为 true,那么我会错过该操作。
    猜你喜欢
    • 2020-11-24
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    相关资源
    最近更新 更多