我是 Angular 新手,我正在尝试了解子路由的路由过程。如此处所述(https://angular.io/guide/router#milestone-4-crisis-center-feature),我希望在具有单独路由模块的单独功能模块中具有不同的应用程序功能。
在这些路由模块中,我配置了一些子路由,并且我有一个导航栏(在 feature.component.html 中),其中包含一些相对的 routerLinks(第一段中没有“/”,请参阅https://angular.io/api/路由器/路由器链接)。但是,这并没有按预期工作。它不是在 localhost:4200/child 和 localhost:4200/grandchild 之间切换,而是尝试从 localhost:4200/child 转到 localhost:4200/child/grandchild;我想了解为什么会这样。使用像'/child'这样的绝对routerLink,它可以工作;但据了解路由它也应该在没有前导斜杠的情况下工作,因为路由器然后根据激活的路由检查子节点
取自官方 Angular 文档:
第一个段名称可以在前面加上 /、./ 或 ../:
- 如果第一段以 / 开头,路由器将从应用程序的根目录查找路由。
- 如果第一段以 ./ 开头,或者不以斜杠开头,则路由器将改为查找当前激活路由的子节点。
- 如果第一段以 ../ 开头,路由器将上升一级。
feature.component.ts(仅限 NgModule)
@NgModule({
declarations: [
FeatureComponent,
ChildComponent,
GrandchildComponent
],
imports: [
CommonModule,
FeatureRoutingModule
]
})
feature.component.html
<div class="border border-primary">
<h1>feature.component</h1>
<div>
<nav class="navbar navbar-expand bg-dark navbar-dark">
<div class="navbar-nav">
<a class="nav-item nav-link" routerLink="child">CHILD</a>
<a class="nav-item nav-link" routerLink="grandchild">GRANDCHILD</a>
</div>
</nav>
</div>
<router-outlet></router-outlet>
</div>
feature-routing.module.ts(仅路由)
const routes: Routes = [
{
path: '', component: FeatureComponent, children:
[
{ path: 'child', component: ChildComponent },
{ path: 'grandchild', component: GrandchildComponent }
]
}
];
app.component.html
<h1>app.component</h1>
<router-outlet></router-outlet>
app-module.ts(仅限 NgModule)
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FeatureModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
- 在第一次加载时,我看到带有导航栏的功能组件。网址说: localhost:4200
- 首先点击 'CHILD' = URL 更改为localhost:4200/child --> 现在可以了
- 第二次单击“GRANDCHILD”,它会尝试转到localhost:4200/child/(grandchild),取自控制台输出:
NavigationError {id: 32, url: "/child/(grandchild)", error: Error: 无法匹配任何路由。URL 段:ApplyRedirects.push../node_modules/@angu 中的“孩子”…}
为什么会这样?如何在控制台中输出激活的路由以更好地理解所有内容?