我的angular 8应用程序有问题,没有渲染到命名的路由器插座中。
路线为:
routes.module:
const routes: Routes = [
...
{
path: 'settings', loadChildren: './settings/settings.module#SettingsModule', canActivate
},
]
settings.module
RouterModule.forChild([
{
path: '', component: SettingsComponent
},
{
path: 'profile', component: ProfileComponent, outlet: 'settings_o'
},
{
path: 'users', component: UsersComponent, outlet: 'settings_o'
}
])
settings.component.html
<nav mat-tab-nav-bar color="primary" class="bg-whitesmoke primary">
<span mat-tab-link
*ngFor="let link of navLinks"
[routerLink]="[{outlets: {settings_o: [link.link]}}]"
routerLinkActive #rla="routerLinkActive"
[active]="rla.isActive">
{{link.label}}
</span>
</nav>
<router-outlet name="settings_o"></router-outlet>
当我单击链接时,地址栏中的url会更改(例如,更改为http://localhost:4200/settings/(settings_o:profile)
),但是没有内容呈现到settings_o
,也不会加载组件。控制台中没有错误。
link.link
就是profile
,就像settings.module的路由一样。
我需要更改什么?
答案 0 :(得分:1)
这是一个已知的错误,已经进行了很多讨论:https://github.com/angular/angular/issues/10981
据我所知,尚未完全解决,但有解决方法:https://github.com/angular/angular/issues/10981#issuecomment-454425220
您应该为延迟加载的模块提供默认路由,并为要在命名插座中打开的组件定义子路由,例如:
RouterModule.forChild([
{
path: "default",
component: SettingsComponent,
children: [
{ path: "profile", component: ProfileComponent,outlet: "settings_o" },
{ path: "users", component: UsersComponent, outlet: "settings_o" }
]
}
]);
当然,您必须相应地将导航更改为SettingsComponent
:routerLink='/settings/default'
我做了一个Stackblitz,它不是您的代码的精确副本,但显示了如何解决它:https://stackblitz.com/edit/angular-nctjpv
顺便说一句,在您的原始解决方案中,如果您将命名路由器出口放置在根组件中,我认为它将显示子组件,但是放置在错误的位置。