我们有一个公开以下属性的数据源:
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去抖动来完成此任务。
我们遇到的很多示例都使用ngModelChange
或Observable.fromEvent
,例如Debounce Directive。这些不足之处是因为它们仍然经常更新源,只是延迟了对另一种方法的调用。
我们遇到的另一种选择是订阅某种可以节流更新的可观察量。但这似乎不足以打破双向约束。如果CurrentValue
发生更改,我的输入字段将不再更新。
我的输入字段如何监视NON-Observable源上的更改,同时限制设置源?
答案 0 :(得分:1)
你可以使用lodash:
import * as _ from 'lodash';
public set CurrentValue(value: string)
{
_.throttle(() => {
this.Record.CaptureUndoState();
this.Record.SetValue(this.Field.PropertyName, value);
}, 500);
}