lar*_*rpo 18 typescript ionic-framework angular2-formbuilder angular angular-reactive-forms
我有一个formbuilder组,我正在使用valueChanges监听更改并触发一个保存函数,然后在表单上刷新函数:
this.ticketForm.valueChanges.debounceTime(1000).distinctUntilChanged()
.subscribe(data => {
this.saveTicket();
this.refreshTicket();
})
Run Code Online (Sandbox Code Playgroud)
然后我重新加载表单并使用patchValue将数据重新分配到表单字段(以及页面上的其他位置,特别是更改日志),例如:
this.ticketForm.patchValue(ticket, { emitEvent: false });
Run Code Online (Sandbox Code Playgroud)
但是,尽管emitEvent:false,这会导致表单的无限循环保存.
这是一个Angular 4/Ionic 3错误还是我的误解?
Lak*_*hay 16
试着增加onlySelf: true与一起emitEvent: false以这种方式:
this.ticketForm.patchValue(ticket, {emitEvent: false, onlySelf: true});
Run Code Online (Sandbox Code Playgroud)
小智 11
由于代表的原因无法发表评论,所以我将其作为@Craig Wayne 的答案发布。
仅当您使用以下方式侦听表单控件上的值更改时,emitEvent:false 才有效:
this.form.valueChanges.controlName.subscribe(val => doSomething(val));
Run Code Online (Sandbox Code Playgroud)
如果您绑定到元素上的模型更改,则无论以下情况都会发出事件:
<input (ngModelChange)="doSomething($event)"/>
Run Code Online (Sandbox Code Playgroud)
在使用 Angular 9.1.13 时,我也遇到了同样的问题。尝试使用FormControl.setValue、 和FormGroup.patchValueAPI,并在所有可能的组合中使用建议的参数{emitEvent: false, onlySelf: true}。可valueChanges观察到的仍然被触发。
最终唯一对我有用的是:
myForm.disable();
myForm.patchValue({myControl: ''}, {onlySelf: true, emitEvent: false});
myForm.enable();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9168 次 |
| 最近记录: |