Angular 2 Маршрутизация всегда перенаправляется на корневой путь

Я использую Angular 2 rc4, и я использовал новую маршрутизацию, подобную этой

const routes: RouterConfig = [{
 path: '',
 component: PublicLayoutComponent,
 children: [
 { path: '', component: HomeComponent},
 { path: 'login', component: LoginComponent}
 ]
}]

для этого кода я не могу получить доступ к маршруту /login Я просто хочу знать, что неправильно он всегда перенаправляет на корень, пожалуйста, помогите

4 ответа

Это старый поток, но ответа пока нет. Если это кому-то помогает - я нашел это для своего случая, добавив это в параметры RouterModule.forRoot:

RouterModule.forRoot(appRoutes,
 { enableTracing: true } // <-- debugging purposes only
)

Angular.io router docs

Затем я обнаружил, что вложенный компонент генерирует исключение. После исправления моя маршрутизация работала. Случилось то, что маршрутизация работала, она просто взрывалась, когда она достигла нагрузки этого 1 компонента, поэтому angular просто закрывает загрузку страницы и по умолчанию использует базовый URL. Возможно, это связано с соображениями безопасности, если ваш уязвимый компонент влияет на безопасность страницы?


Angular Невозможно сопоставить маршруты: 'login'. Посмотрите на дерево, как показано ниже:

App
 /\
 / \
 Private Public
 /\
 / \
 Home Login

Затем код выглядит так:

export const routes: RouterConfig = [
 { path: '', redirectTo: 'public', pathMatch: 'full' },
 { path: 'private', component: PrivateComponent },
 { path: 'public', component: PublicComponent,
 children: [
 { path: '', redirectTo: 'home', pathMatch: 'full' },
 { path: 'home', component: HomeComponent},
 { path: 'login', component: LoginComponent}
 ]
 }
];

Надеюсь на эту помощь!


Я думаю, проблема может заключаться в том, что корневой путь (PublicLayoutComponent) и первый ребенок (HomeComponent) имеют один и тот же путь.

т.е. какой компонент вы ожидаете увидеть при переходе на http://localhost:4200/

Попробуйте изменить его, чтобы увидеть, работает ли он?

const routes: RouterConfig = [{
 path: '',
 component: PublicLayoutComponent,
 children: [
 { path: 'home', component: HomeComponent},
 { path: 'login', component: LoginComponent}
 ]
}]


У вас есть общий путь '' в качестве первого элемента, но у вас нет установленного набора pathMatch, так что путь соответствует всем. Основываясь на текущей конфигурации маршрутизатора angular, он найдет первое совпадение в списке маршрутов и отправит туда пользователя, в этом случае '' будет соответствовать всем, поэтому он всегда просто туда и не беспокоится о том, чтобы идти дальше по списку маршрутов. См. Документацию здесь: https://angular.io/guide/router#configuration

Думаю, вам нужно:

const routes: RouterConfig = [{
 path: '',
 component: PublicLayoutComponent,
 children: [
 { path: '', component: HomeComponent, pathMatch: 'full'},
 { path: 'login', component: LoginComponent}
 ]
}]

licensed under cc by-sa 3.0 with attribution.