如果输入 Y 获得值则禁用输入 X 时无限循环,反之亦然 angular 2
Infinite loop when disabling input X if input Y gets value and viceversa in angular 2
我有一个带有 angular2 的反应形式。
我有两个文本输入元素,每个元素都有自己的 valueChange 函数。
在这种情况下,如果存在非空值,则禁用另一个输入,否则启用,这会触发另一个输入中的更改事件,从而产生无限循环。我该如何解决?
代码是这样的:
this.myForm.get('inputX').valueChages.subscribe(val => {
if(val && val.trim().length > 0) {
this.myForm.get('inputY').disable(); // this triggers a change in inputY
} else {
this.myForm.get('inputY').enable(); // this triggers a change in inputY
}
})
this.myForm.get('inputY').valueChages.subscribe(val => {
if(val && val.trim().length > 0) {
this.myForm.get('inputX').disable(); // this triggers a change in inputX
} else {
this.myForm.get('inputX').enable(); // this triggers a change in inputX
}
})
我的解决方法是在禁用或启用之前检查每个元素的状态,因此不要尝试禁用和已经禁用的元素,也不要尝试启用已经启用的元素。
有 cleaner/simpler 的方法吗?
你可以试试 emitEvent: false
this.myForm.get('inputY').disable({emitEvent: false});
我有一个带有 angular2 的反应形式。 我有两个文本输入元素,每个元素都有自己的 valueChange 函数。 在这种情况下,如果存在非空值,则禁用另一个输入,否则启用,这会触发另一个输入中的更改事件,从而产生无限循环。我该如何解决?
代码是这样的:
this.myForm.get('inputX').valueChages.subscribe(val => {
if(val && val.trim().length > 0) {
this.myForm.get('inputY').disable(); // this triggers a change in inputY
} else {
this.myForm.get('inputY').enable(); // this triggers a change in inputY
}
})
this.myForm.get('inputY').valueChages.subscribe(val => {
if(val && val.trim().length > 0) {
this.myForm.get('inputX').disable(); // this triggers a change in inputX
} else {
this.myForm.get('inputX').enable(); // this triggers a change in inputX
}
})
我的解决方法是在禁用或启用之前检查每个元素的状态,因此不要尝试禁用和已经禁用的元素,也不要尝试启用已经启用的元素。 有 cleaner/simpler 的方法吗?
你可以试试 emitEvent: false
this.myForm.get('inputY').disable({emitEvent: false});