如果去抖动的观察者的变化在飞行中,则角度NgModel不会改变

时间:2017-11-28 15:47:25

标签: javascript angular rxjs

我正在使用ChangeDetectionStrategy.OnPushRxJS Subject debounceTime使用model2进行奇怪的设置。

this Plunker中,我对以下行为感到惊讶:

  • 键入第一个输入框("模型1和#34;)并验证它是否更新了模型,重置按钮是否正常工作
  • 键入第二个框,并注意重置按钮 如果已在飞行中进行了更改
  • 完成10秒的去抖更改后,第二个重置按钮 按预期工作

第二个重置按钮认为不起作用,因为我没有立即更新ngModelChange监听器中Subject的值,而是将更改事件传递给$output = aray_map( function ($item) { $item[] = $sub[2] - $sub[1]; return $item; }, $arr); 并对其进行去抖动,然后只有在10秒的去抖后才更新它。但是我很难过,为什么重置按钮在这样的更新飞行时不会起作用。发生了什么事?

1 个答案:

答案 0 :(得分:3)

这实际上是因为this.model2的值实际上并未从"Model 2"更改,即使输入的值似乎已经明显改变。由于传递到ngModel的值不会更改,因此不会覆盖输入的新值。这里的解决方案是使用当前值维护变量model2:

handleChange2(value: string) {
   this.model2 = value;
   this.model2Subject.next(value);
}