作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 3 个字段与表单链接,类型为数字,当我修改字段 A 时,它会修改字段 B 和 C,当我修改字段 B 时,它会修改字段 A 和 C,当我修改字段 C 时,它会修改字段 A 和B相应地。
我的组件如下:
this.form= this.formBuilder.group({
fieldA: new FormControl(this.valueA),
fieldB: new FormControl(this.valueB),
fieldC: new FormControl(this.valueC),
});
onFieldAchanged() {
//Do some calculs
this.form.get('fieldB').setValue(x);
this.form.get('fieldC').setValue(y);
}
onFieldBchanged() {
//Do some calculs
this.form.get('fieldA').setValue(x);
this.form.get('fieldC').setValue(y);
}
onFieldCchanged() {
//Do some calculs
this.form.get('fieldA').setValue(x);
this.form.get('fieldB').setValue(y);
}
我的模板如下:
<input formControlName="fieldA" type="number" class="form-control" (ngModelChange)="onFieldAchanged()"/>
<input formControlName="fieldB" type="number" class="form-control" (ngModelChange)="onFieldBchanged()"/>
<input formControlName="fieldC" type="number" class="form-control" (ngModelChange)="onFieldCchanged()"/>
当您修改其中一个字段时就会出现问题,它会进入循环并导致应用程序崩溃。
我已经尝试在我的 setValue()
中添加参数 emitEvent: false
但它没有任何改变
所以我的问题是:有没有办法防止触发其他功能?当我修改 fieldA
时,我只想进入我的 onFieldAchanged()
函数并设置其他两个值,仅此而已。
谢谢你的帮助
最佳答案
肯定有:
首先,不使用 (ngModelChange)
,而是使用 valueChanges
observable:
this.form.get('fieldA').valueChanges.subscribe(v => this.onFieldAchanged());
this.form.get('fieldB').valueChanges.subscribe(v => this.onFieldBchanged());
this.form.get('fieldC').valueChanges.subscribe(v => this.onFieldCchanged());
然后,将 emitEvent
选项添加到您的 setValue
函数中以阻止它们的 valueChanges
发出:
onFieldAchanged() {
//Do some calculs
this.form.get('fieldB').setValue(x, {emitEvent: false});
this.form.get('fieldC').setValue(y, {emitEvent: false});
}
问题是将 ngModel
与 react 形式混合在一起。必须选择一个。
关于angular - 有没有办法防止 formControl 触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59425469/
我是一名优秀的程序员,十分优秀!