[英]FormBuilder - Custom Validator - Many fields and promise
我想使用自定義驗證器來驗證我的表單,該驗證器使用許多字段,並在我的驗證函數中使用 Promise ......
我寫了這段代碼:
this.saisieForm = this.fb.group({
'refUnique': ['', [Validators.required]],
'refLettrage': ['', [Validators.required],ValidateRefLettrage(this.operationService)],
'typeOperation': ['', [Validators.required, ValidateTypeOperation]],
'codeProduitGestion': new FormControl(''),
'sectionPatri': new FormControl(''),
'compteDispo': ['', [Validators.required, ValidateCompteDispo]],
'dateOperation': ['', [Validators.required,ValidateDate(this.envService.config.app.dateOperationMinJour,this.envService.config.app.dateOperationMaxJour)]],
'dateValeur': ['',[Validators.required,ValidateDate(this.envService.config.app.dateValeurMinJour,this.envService.config.app.dateValeurMaxJour)]],
'montant': ['', Validators.required],
'commentaire': new FormControl('')
}, {
validator: [ValidatorsSaisies.validateMontant(Validators.required, ['montant', "compteDispo"]),ValidatorsSaisies.validateDoublons2(this.operationService)]
});
對於自定義驗證器:
static validateDoublons2(operationService:OperationService) {
return (group: FormGroup): {[key: string]: any} => {
return new Promise(resolve => {
setTimeout(() => {
console.log('myAsyncValidator finished!')
setTimeout(() => group.updateValueAndValidity())
operationService.checkDoublons(
group.get("refUnique").value,
group.get("dateValeur").value,
group.get("dateValeur").value,
group.get("montant").value,
group.get("montant").value,
group.get("compteDispo").value.taParamDevise,
group.get("refLettrage").value,
group.get("typeOperation").value.sens,
"200")
.then((data) => {
test = true;
resolve(null);
})
.catch((err) => {
resolve({validRefLettrage: true})
});
}, 2500);
})
}
}
問題是...... validateDoublons2 無限循環的調用......
您正在自定義驗證器中使用updateValueAndValidty
,它會重新計算值和驗證狀態。 因此,當您調用它時,您的自定義驗證器正在重新啟動,從而導致無限循環。 我認為您根本不需要這個,但是如果您正在使用它,請執行...
updateValueAndValidity({emitEvent: false})
這意味着該函數不會發出事件,並且您的自定義驗證器在調用它后不會重新觸發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.