Итак, я пытаюсь подтвердить, если имя пользователя уже занято или нет в моей форме редактирования пользователя. Вот моя форма:
editForm= new FormGroup({
username: new FormControl('', [Validators.required, Validators.maxLength(60)], this.validateUser.bind(this)),
fullName: new FormControl('', Validators.maxLength(60)),
email: new FormControl('', Validators.maxLength(60)),
phoneNumber: new FormControl('', Validators.maxLength(60)),
}, { updateOn: "blur"});
В своем валидаторе я проверяю, изменилось ли исходное имя пользователя перед отправкой запроса на валидацию, сравнивая его с переменной, в которой информация пользователя загружена с сервера:
validateUser(control: FormControl): Observable<ValidationErrors | null> {
if(control.value != this.originUser.username){
return this.userService.validateUsername(control.value).pipe(map(res => {
return res['valid'] ? null : { invalidUsername: true};
}));
}
}
Все работает нормально, если я пытаюсь изменить имя пользователя на уже занятое другим пользователем, и я получаю сообщение об ошибке. Также, если после этого я изменяю его на исходное имя пользователя, оно также работает нормально, и запрос на проверку не отправляется.
Мой this.originUser
заполняется в ngOnInit
, и это происходит после первого вызова валидатора в форме. инициализация, поэтому я по-прежнему вижу отправленный запрос проверки с исходным именем пользователя и получаю сообщение об ошибке, когда форма загружается с исходным именем пользователя.
ngOnInit() {
this.userService.getOne(this.id).subscribe(user =>{
this.editForm.patchValue({
username: user.username,
fullName: user.fullName,
email: user.email,
phoneNumber:user.phoneNumber
});
this.originUser = user;
});
}
}
Я не могу понять logi c, как не отправлять запрос проверки при проверке вызывается впервые при открытии страницы «Редактировать пользователя»
UPD: Я понял, как не получить ошибку при загрузке формы, добавив this.editForm.get('username').updateValueAndValidity();
после загрузки this.originUser
в ngOnInit
, но при загрузке формы все еще отправляется ненужный запрос проверки.