启用/禁用表单控件触发valueChanges Angular 2表单

Ben*_*Ben 18 angular2-forms angular

任何想法为什么在运行以下代码时我得到控制valueChanges事件被'firstName'触发?

let form: FormGroup = this.createForm();
form.controls['firstName'].enable();

form.controls['firstName'].valueChanges(value=>{
      //some code
});
Run Code Online (Sandbox Code Playgroud)

由于没有任何价值变化(只是状态),我不希望valueChanges在这里触发,只有statusChanged.

我错过了什么吗?

Ali*_*zad 17

基本上完整的表单映射到模型上,因此无论何时启用/禁用任何控件,表单模型的属性都会更改.而且因为模型正在改变所以valueChanges事件将被触发.我认为这是正常的.

  • 除了使用`this.form.controls [controlKey] .enable({emitEvent:false})之外,还有一些关于如何避免它的建议;`? (22认同)
  • 你是救星 (3认同)
  • 该死的好评论@Ben (2认同)

小智 9

我有角版本6.0.3

this.form.get('inputName').setValue(newValue, {onlySelf: true, emitEvent: false});
Run Code Online (Sandbox Code Playgroud)

这对我有用。


aw0*_*w04 6

不知道它为什么会如此运行,但是您可以发送emitEvent: false来启用/禁用而不触发valueChanges

form.controls['firstName'].enable({ emitEvent: false });
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。请注意,当您尝试启用或禁用整个表单时,它也会起作用:“form.enable({emitEvent: false });” (2认同)