[英]Get all Angular form controls that have changed from enabled to disabled, or vice versa?
[英]Dynamic form validation in angular 6 with condition and vice versa
我正在使用動態表單驗證處理 angular 6。 我有三個表單gender
,最初需要驗證; 要動態驗證的ageFrom
和ageTo
。 如果首先輸入ageFrom
值,則需要對ageTo
進行驗證,而當首次輸入ageTo
值時,則需要對ageFrom
進行驗證。 我的代碼如下:
this.formGroup = this.fb.group({
ageTo: [''],
ageFrom: [''],
gender: new FormControl('', Validators.required),
});
const ageFrom = <FormControl>this.formGroup.get('ageFrom');
const ageTo = <FormControl>this.formGroup.get('ageTo');
this.subscription = ageFrom.valueChanges.subscribe(value => {
if (value) {
ageTo.setValidators([Validators.required,]);
} else {
ageTo.setValidators([Validators.nullValidator,]);
}
this.formGroup.updateValueAndValidity();
});
this.subscription = ageTo.valueChanges.subscribe(value => {
if (value) {
ageFrom.setValidators([Validators.required,]);
} else {
ageFrom.setValidators([Validators.nullValidator,]);
}
this.formGroup.updateValueAndValidity();
});
在此代碼之后,它繼續無限循環。 它給出了ERROR RangeError: Maximum call stack size exceeded
我怎樣才能解決有條件的,反之亦然的動態表單驗證。
將 emitEvent false 設置為 updateValueandValidity 方法。
ngAfterViewInit() {
const ageFrom = <FormControl>this.formGroup.get("ageFrom");
const ageTo = <FormControl>this.formGroup.get("ageTo");
ageFrom.valueChanges.subscribe(value => {
console.log(value, "ageFrom");
if (value) {
ageTo.setValidators(Validators.required);
} else {
ageTo.setValidators(Validators.nullValidator);
}
ageTo.updateValueAndValidity({ emitEvent: false });
});
ageTo.valueChanges.subscribe(value => {
console.log(value, "ageTo");
if (value) {
ageFrom.setValidators(Validators.required);
} else {
ageFrom.setValidators(Validators.nullValidator);
}
ageFrom.updateValueAndValidity({ emitEvent: false });
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.