Я создал реактивную форму, когда пользователь заполнил поле и нажал «Отправить», он будет перенаправлен на страницу.Теперь, после этого, я буду запускать
this.router.navigate['somepage']
Все работает до Я реализовал reCAPTHCA v2 в своей реактивной форме.
Вот моя простая настройка реактивной формы:
<form [formGroup]="searchForm" (ngSubmit)="onSearchSubmit()">
....
<div id="recaptcha" data-sitekey="xxx" class="g-recaptcha"></div>
<button type="submit" [disabled]="flag">search</button>
</form>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"
async defer>
Опять же, все работает до этого момента, даже после вставки тега сценария, обратный вызов onloadCallback
вызывается до проверки / подтверждения, еслипользователь - бот или нет.
Практически реактивная форма + reCAPTCHA работает, НО маршрутизатор, похоже, забит или заблокирован.
Работают ссылки на маршрутизатор, привязанные к якорям, routerLinkActive правильно устанавливает класс стиля соответственно, но компоненты не отображаются.
Я сократил его до этого:
Iне может использовать навигацию любого типа при использовании маршрутизатора, КОГДА маршрутизатор вызывается в scope функций инициализации и проверки reCAPTCHA, как показано ниже.
declare var grecaptcha : any;
@Component({
...
})
export class TestComponent {
//
testSubObs: Subject < any > = new Subject();
constructor(...) {}
ngOnInit() {
// ....
this.testSubObs.subscribe(
e => {
//router still doesnt work here
this.router.navigate(['/somepage']);
});
setTimeout(() => {
this.router.navigate(['/somepage']); //works
}, 5000);
}
initCaptcha() {
const verify = (response) => {
// works
console.log(response);
// doesnt work
this.router.navigate(['/stack']);
this.testSubObs.next(response);
}
this.windowService.nativeWindow.onloadCallback = () => {
// this works, properly renders the widgets
grecaptcha.render('recaptch', {
'sitekey': xxxx,
'callback': verify // tried verify.bind(this) still doesnt work. this is inside an arrow function. It doesnt matter in the first place.
})
// doesnt work
this.router.navigate(['/stack']);
}
//this works
this.router.navigate(['/stack']);
}
}
Я пытался использовать наблюдаемые в этих функциях для вызова маршрутизатора вне этих функций, но он не работает.Я что-то пропустил?Пожалуйста помоги.Спасибо.
Кроме того, я поместил <a [routerLink]="..">
в шаблон HTML в том же компоненте, и маршрутизация работает правильно.Это меня сильно смущает, потому что ошибки не появляются, я даже пытался aot
, но ошибок и предупреждений не появляется.