Angular 4 ngModel油门模型更新

时间:2017-07-20 19:59:42

标签: angular rxjs

我们有一个公开以下属性的数据源:

public get CurrentValue()
{
    return this.Record.GetValue(this.Field.PropertyName);
}
public set CurrentValue(value: string)
{
    this.Record.CaptureUndoState();
    this.Record.SetValue(this.Field.PropertyName, value);
}

然后我们可以通过ngModel:

将我的输入字段绑定到它
<input type="text" [(ngModel)]="CurrentValue" />

这很好用,但我们希望将CurrentValue的设置延迟500ms,以避免每次启动时捕获撤消状态。在角度1.x中,您可以使用ng-model-options去抖动来完成此任务。

我们遇到的很多示例都使用ngModelChangeObservable.fromEvent,例如Debounce Directive。这些不足之处是因为它们仍然经常更新源,只是延迟了对另一种方法的调用。

我们遇到的另一种选择是订阅某种可以节流更新的可观察量。但这似乎不足以打破双向约束。如果CurrentValue发生更改,我的输入字段将不再更新。

我的输入字段如何监视NON-Observable源上的更改,同时限制设置源?

1 个答案:

答案 0 :(得分:1)

你可以使用lodash:

import * as _ from 'lodash';

public set CurrentValue(value: string)
{
    _.throttle(() => {
        this.Record.CaptureUndoState();
        this.Record.SetValue(this.Field.PropertyName, value);
    }, 500);
}