如何在单个组件中使用多个router outlet?配置后无法渲染如何解决
命名路由出口不渲染的排查解决步骤
- 检查路由配置是否正确指定
outlet字段
必须在对应子路由配置中声明和模板一致的出口名称,示例配置如下:
const routes: Routes = [ { path: '', // 替换为你当前父组件对应的路由路径 component: ParentComponent, // 替换为存放router-outlet的父组件类 children: [ { path: 'componentOne', component: ComponentOne, outlet: 'myoutlet' // 必须和模板中<router-outlet>的name属性完全一致 }, { path: 'componentTwo', component: ComponentTwo, outlet: 'myoutlet' } ] } ]- 检查路由配置是否正确指定
- 检查组件是否完成注册
确认ComponentOne、ComponentTwo都已经添加到对应NgModule的declarations数组中,独立组件的话需要在路由配置的imports数组中导入。
- 检查组件是否完成注册
- 检查路由模块导入配置
根模块必须导入RouterModule.forRoot(routes),功能模块必须导入RouterModule.forChild(routes),不能漏写RouterModule导入。
- 检查路由模块导入配置
- 排除父路由配置冲突
如果父路由配置了pathMatch: 'full',会导致子命名出口无法匹配,删除该配置或将其改为pathMatch: 'prefix'即可。
- 排除父路由配置冲突
- 测试路由跳转逻辑
先点击导航按钮观察地址栏,如果出现(myoutlet:componentOne)格式的片段,说明跳转逻辑正常,问题出在路由配置侧;如果没有该片段,可以先用代码跳转方式排除routerLink语法问题:
按钮绑定// 父组件中添加逻辑 import { Router } from '@angular/router'; constructor(private router: Router) {} navigateToOne() { this.router.navigate([{ outlets: { myoutlet: ['componentOne'] } }]); }(click)="navigateToOne()"测试是否能正常跳转。- 测试路由跳转逻辑
内容的提问来源于stack exchange,提问作者Naveen Kumar
相关产品推荐
相关产品推荐

