在Angular 2+中,是否可以通过编程将输入值重置为其先前值?
我有“选择”下拉列表,选择某个值后,如果某些验证失败,则需要将其值重置为上一个值。
如何使用ngModel(模板形式)和formControl(反应形式)实现相同目的? (只需知道两种方法是否可行)。
我已经发现,如果将ngModelChange事件放置在模板中的select标签中的ngModel之前,则在ngModelChange事件中我们将获得更改之前的ngModel值。 参考:https://github.com/angular/angular/issues/11234
但是我认为这种方法不够简洁,有时可能会造成混淆。
答案 0 :(得分:1)
是的,可以使用反应式表单方法和rxjs运算符pairwise。
使用rxjs运算符valueChanges
和pairwise
在组件中订阅formControl startWith
示例代码
this.myForm.controls['control1'].valueChanges
.pipe(startWith(1), pairwise()).subscribe(
([prevValue, selectedValue]) => {
console.log(prevValue); // previous value
console.log(selectedValue); // new value
}
);
}
您还可以检查有效的DEMO
注意:我使用startWith是因为,成对具有两个值(上一个和当前)时将发出值。因此,请在1
中添加默认值startWith
(默认选项的值)。