Angular 5 的子路由无法正常工作

Posted

技术标签:

【中文标题】Angular 5 的子路由无法正常工作【英文标题】:Child Routing for Angular 5 not working properly 【发布时间】:2019-01-01 05:51:50 【问题描述】:

您好,我正在尝试使用子路由,但它没有按预期工作。

我的 angular 5 结构:

在这种情况下,顶部导航包含加载子模块的链接,子导航包含更新子模块内容的链接。

应用模块(和应用组件)包含一个顶部导航栏,用于导航到不同的子模块,应用组件模板可能如下所示

 <top-navbar></top-navbar>
 <router-outlet></router-outlet>

但这就是复杂性。我需要我的子模块具有类似的布局,带有二级导航栏和它们自己的路由器出口来加载它们自己的组件。

 <sub-navbar></sub-navbar>
 <router-outlet name='sub'></router-outlet>

我的 app.module.ts

RouterModule.forRoot([
  
    path: 'career', component: CareerComponent,
    children: [
       path: 'roles', component: rolesComponent, outlet: 'sub' 
    ]
  
])

我的 html 文件,我在导航按钮上使用以下格式:

[routerLink]="[ outlets:  sub: ['roles']  ]"

我也尝试了以下方法(这没有任何作用,我点击角色按钮并没有任何反应):

[routerLink]="['/roles']"

在顶部菜单上,我从导航中单击职业。 现在我的网址显示为 mywebsite.com/career

现在我有一个带有侧边菜单的职业页面,其中一个按钮是角色。这应该会改变页面的部分视图。 组件加载正确,问题是url格式错误。

预期网址:

 mywebsite.com/career/roles

如何显示(错误):

 mywebsite.com/career/(sub:roles)

【问题讨论】:

在您的配置中没有太多深入,这似乎没有错。当您使用命名插座时,这就是您访问它的方式。你应该阅读更多关于它的信息angular.io/guide/… 如何更改我的配置以使其显示为职业/角色? 【参考方案1】:

首先,让我们确保我们在术语方面意见一致。

“子”路由是嵌套路由。像这样的:

请注意,应用路由的路由器出口是全屏的。 shell 组件的路由器出口是导航栏下方的区域。编辑组件的路由器出口是选项卡下的区域。

子路由是使用children 属性定义的,就像您在上面问题中显示的路由配置中一样。

子路由与命名(也称为辅助)路由不同。辅助路由用于并排且不处于嵌套关系的路由。目前辅助路由存在很多错误和问题,我目前不推荐它们。

从您的描述看来,您确实需要 child 路由而不是 aux/named 路由。所以你不应该使用name 属性或outlet 属性。

除非我误解了你的情况?

我有一个演示子路由(和其他一些路由技术)的 youtube 视频:https://www.youtube.com/watch?v=LaIAHOSKHCQ&t=5s

你可以在这里找到示例代码:

https://github.com/DeborahK/MovieHunter-routing

这里:

https://github.com/DeborahK/Angular-Routing

【讨论】:

以上是关于Angular 5 的子路由无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

路由在角度 6 中无法正常工作

Angular6路由器导航到共享相同组件的多个子路由

角度模块路由无法正常工作

Angular 5 EventEmitter 无法正常工作

使用 apache 重写的 Angular7 无法正常工作

点击事件在 Angular 5 中无法正常工作