我正在创建一个仪表板应用程序,到目前为止,我有两个懒惰加载模块AuthModule
和AdminModule
我的app-routing-module.ts
看起来像这样
const routes: Routes = [
{
path: '',
loadChildren: './auth/auth.module#AuthModule'
},
{
path: 'admin',
loadChildren: './admin/admin.module#AdminModule',
canActivate: [AuthGuardService]
},
{
path: '**',
component: NotFoundComponent
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
我的app.component.html
有一个<router-outlet></router-outlet>
,应该在其中呈现上述路线。
所以这些网址完美地工作/auth/
和/admin/
在我的admin-routing.module.ts
我有以下路线
const routes: Routes = [
{
path: '',
component: AdminComponent,
children: [
{path: '', pathMatch: 'full', redirectTo: 'dashboard'},
{path: 'dashboard', component: DashboardComponent },
{path: 'users', component: UsersComponent },
{path: 'reports', component: ReportsComponent },
{path: 'booking', component: BookingComponent }
]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
所以qazxsw poi路线直接导航到qazxsw poi,这也很完美。
在我的/admin/
我添加了另一个/admin/dashboard/
应该在其中呈现admin.component.html
路线,所以我可以有sidenav栏布局。
问题是只有<router-outlet></router-outlet>
的AdminModule
的默认路线在第二个AdminModule
内完全呈现,每当我尝试导航到任何其他子路线,如/admin/dashboard
或router-outlet
,应用程序重定向到/admin/users/
这是我的问题说明。 /admin/booking/
NotFoundComponent
定义的方式意味着所有子路径都期望AdminComponent模板中的元素。 Angular将尝试将所有子项呈现为AdminComponent。
我有同样的问题。我没有设法在根路由器插座内渲染延迟加载模块的子路由。我通过以下算法解决了这个问题:
对于每个子组件{
path: '',
component: AdminComponent,
children: [
{path: '', pathMatch: 'full', redirectTo: 'dashboard'},
{
path: 'dashboard',
component: DashboardComponent,
children: [
{path: 'users', component: UsersComponent },
{path: 'reports', component: ReportsComponent },
{path: 'booking', component: BookingComponent }
]
}
]
}
的懒惰加载模块admin-routing.module.ts
应该在c
的出口呈现:
M
创建一个延迟加载的模块AppComponent
c
的路由声明中删除路由对于c
,这看起来像这样:
M
admin/users
这个解决方案有几个缺点:
所以它不理想,但它的工作原理。
我终于找到了解决方案。
在app.module文件中,将代码更改为如下所示:
app-routing-module.ts
在延迟加载的模块路由文件(const routes: Routes = [
{
path: '',
loadChildren: './auth/auth.module#AuthModule'
},
{
path: 'admin',
loadChildren: './admin/admin.module#AdminModule',
canActivate: [AuthGuardService]
},
{
path: 'admin/users',
loadChildren: './admin/users/admin-users.module#AdminUsersModule',
canActivate: [AuthGuardService]
},
{
path: '**',
component: NotFoundComponent
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
)中,将代码更改为如下所示:
const routes: Routes = [
{
path: '',
component: AuthComponent, //<--- Add this
loadChildren: './auth/auth.module#AuthModule'
},
{
path: 'admin',
component: AdminComponent, //<--- Add this
loadChildren: './admin/admin.module#AdminModule',
canActivate: [AuthGuardService]
},
{
path: '**',
component: NotFoundComponent
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
}
)
现在您的代码应该按预期工作