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


任何想法为什么在运行以下代码时我得到了 valueChanges 的事件 'firstName' 控制开除?

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

form.controls['firstName'].valueChanges(value=>{
      //some code
});

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

我错过了什么吗?


2712
2018-03-15 11:34


起源



答案:


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


8
2018-03-15 11:41



除了使用之外如何避免它的一些建议 this.form.controls[controlKey].enable({emitEvent:false}); ? - Ben
他们说这个功能有一个错误: github.com/angular/angular/issues/12366 - Sleeper9
你是一个救星 - pantonis
该死的评论@Ben - Lexy Feito
@Ben Great JERB! - prolink007


答案:


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


8
2018-03-15 11:41



除了使用之外如何避免它的一些建议 this.form.controls[controlKey].enable({emitEvent:false}); ? - Ben
他们说这个功能有一个错误: github.com/angular/angular/issues/12366 - Sleeper9
你是一个救星 - pantonis
该死的评论@Ben - Lexy Feito
@Ben Great JERB! - prolink007


我有角版6.0.3

this.form.get('inputName').setValue(newValue, {onlySelf: true, emitEvent: false});

这对我有用。


1
2017-07-21 05:36



OP正在询问 Angular 2 不是6 - Narendra Jadhav


ValueChange 在角度启用或禁用表单时触发是他们的代码中的错误。

如果你不想要的话 ValueChange 在启用或禁用表单时触发, 我找到了一个可能有用的解决方法。

Object.keys(this.toolForm.controls).forEach(key => {
    this.form.controls[key].enable({onlySelf: true, emitEvent: false});
});

上面的代码为我解决了这个问题。


0
2018-06-25 04:37





不知道它为什么会这样,但你可以发送 emitEvent: false 启用/禁用而不启动 valueChanges

form.controls['firstName'].enable({ emitEvent: false });

0
2017-08-29 18:44