Я использую "ng-recaptcha" для углового компонента. Я использую внутри формы, как это:
<form class="form-contact"
[formGroup]="contactForm"
#formDirective="ngForm"
(ngSubmit)="sendMessage(contactForm, formDirective)">
<re-captcha class="recaptcha"
formControlName="captcha"
siteKey="mysitekey">
</re-captcha>
</form>
Затем отправляю форму компоненту:
export class AboutComponent implements OnInit, OnDestroy {
contactForm: FormGroup;
captchaResponse: string;
private emailSubscription: Subscription;
constructor(private emailService: EmailService) { }
ngOnInit() {
this.contactForm = new FormGroup({
captcha: new FormControl('', Validators.required)
});
}
ngOnDestroy(): void {
if (this.emailSubscription) { this.emailSubscription.unsubscribe(); }
}
sendMessage(contactForm: FormGroup, formDirective: FormGroupDirective) {
if (contactForm.valid) {
this.emailSubscription = this.emailService.sendEmail(contactForm.value)
.subscribe((response: ApiResponse) => {
if (response.success) {
console.log(response.message);
formDirective.resetForm();
contactForm.reset();
} else {
this.alertService.error(response.message);
}
}, (error: HttpErrorResponse) => {
console.log({status: error.status, error: error.error});
this.alertService.error('Error sending message. Please try again later or send a direct message.');
}
);
}
}
}
Кажется, все работает нормально. Однако при изменении маршрута (например, пользователь переходит на другую страницу) и AboutComponent
отображается снова, появляется ошибка: Unhandled Promise rejection: timeout ; Zone: <root> ; Task: Promise.then ; Value: timeout undefined
. Я на 99% уверен, что это вызвано тегом <re-captcha>
, потому что ошибка не появляется после удаления тега. Есть ли способ сделать капчу без ошибок при изменении маршрута (и капча перезагружается после того, как я вернусь к компоненту)?
Ссылка на Stackblitz: stackblitz