#angular #routes
#angular #маршруты
Вопрос:
У меня есть проект с модулем маршрутизации со следующими путями:
{ path: 'account-settings', component: AccountSettingsComponent, canActivate: [LearningRedirectGuard],
children: [
{ path: '', redirectTo: 'account', pathMatch: 'full'},
{ path: 'account', component: AccountComponent, data: { menuType: 'learning' }},
{ path: 'password', component: PasswordComponent, data: { menuType: 'learning' }},
{ path: 'notifications', component: NotificationsComponent, data: { menuType: 'learning' }},
{ path: 'preferences', component: PreferencesComponent, data: { menuType: 'learning' }},
{ path: 'security', component: SecurityComponent, data: { menuType: 'learning' }},
]
}
этот проект импортирован в другой более крупный проект, подобный этому
{
path: 'learning',
loadChildren: './../../projects/pxLearning/src/app/app.module#LearningModule',
},
когда я пытаюсь получить доступ к этому маршруту (нажав на кнопку с [routerLink]="['/learning/account-settings/account']"
)
/learning/account-settings/account
AccountComponent (или другие) работает нормально
НО если я пытаюсь обновить страницу, тот же маршрут не создаст экземпляр AccountComponent (или других). То же самое происходит, когда я ввожу URL-адрес в браузере, не создается экземпляр компонентов.
Почему это происходит?
редактировать: LearningGuard
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
if (state.url.indexOf('learning') === -1) {
this.router.navigate(['/learning/' state.url]);
}
return true;
}
Комментарии:
1. вам следует настроить конфигурацию вашего внутреннего сервера так, чтобы он служил в качестве SPA, что обычно означает перенаправление всех запросов, не являющихся исходными, на
index.html
2. Возможно, это проблема с LearningRedirectGuard. Не могли бы вы показать защиту, пожалуйста?
3. @MoxxiManagarm, я только что отредактировал сообщение с кодом
Ответ №1:
if (state.url.indexOf('learning') === -1) {
Вы могли бы переписать эту строку в
if (!state.url.contain('learning')) {
Таким образом, вы всегда перемещаетесь, когда вы НЕ находитесь на маршруте обучения прямо сейчас. Это означает, что вы перенаправлены на другой маршрут, который, вероятно, даже не существует, и ваши маршруты не соответствуют ни одному компоненту.