ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
const clearUrl = state.url.substr(0, state.url.indexOf('?'));
if (state.url !== clearUrl) {
this.router.navigate([clearUrl]);
return false;
}
return true;
}
Может кто подсказать почему этот this.router.navigate([clearUrl]); игнорирует любой роут и редиректит всегда на главную страницу?
Можете поставит tracer и показать другие гварды, думаю что эти приколы от родительского гварда
По задаче думаю вам нужно queryParams обрезать?
это единственный гуард, других нету: app-routing: { path: 'payments', loadChildren: () => import('./pages/payments/payments.module').then(m => m.PaymentsModule) }, payments-routing.module { path: '', redirectTo: 'payment-failed', }, { path: 'payment-failed', component: PaymentFailedComponent, canActivate: [QueryClearGuardService], },
Да, тоже перерыл всю доку и гугл - не нашел как их прямо в роутинге убрать
Есть сущность location и у него есть метод replaceState. Этот метод меняет текущий url на любой без перезагрузки страницы. Вы можете создать сервис и заинжектировать в компонент и вызывать там где вам нужно. Кстати пример со скрина if нужно переписвать под вашу логику, гвард не совсем подходит для этого
Понял, спасибо! Варианта с чисткой квери до загрузки компонента как я понял нету?
Этот сервис можете в гварде попробывать if (urlHasQuery??) {...} return true;
Гуард не редиректит правильно, а кидает на homepage, с этого и начали разговор же :)
https://stackoverflow.com/questions/43698032/angular-how-to-update-queryparams-without-changing-route
Обсуждают сегодня