javascript - 以角度 6 将路线拆分为单独的模块
问题描述
我正在开发一个 Angular 6 应用程序。目前我正在为路由而苦苦挣扎。我很感兴趣,无论我的结构,我想象的是否可以工作。所以它看起来像这样:
应用程序模块 - 包含主路由和一些父路由,其中定义了布局。像这样:
const routes: Routes = [
{
path: 'login',
component: LoginComponent
},
{
path: '',
component: LayoutComponent,
canActivate: [AuthGuard],
canActivateChild: [AuthGuard],
children: [
// {
// path: 'brands',
// loadChildren: 'app/modules/brands/brands.module#BrandsModule',
// pathMatch: 'prefix'
// }
]
}
];
@NgModule({
imports: [RouterModule.forRoot(routes), BrandsModule, ItemsModule],
exports: [RouterModule],
providers: [BosRouteLoader]
})
export class RoutingModule {}
我的一个功能模块在这样的模块中定义了自己的路由:
const routes: Routes = [
{
path: 'brands',
children: [
{ path: '', component: BrandListComponent },
{ path: ':id', component: BrandDetailComponent },
{ path: '**', redirectTo: '' }
]
}];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class BrandsRoutingModule {}
我想实现每个功能模块都定义自己的路由,并且这些路由被注册为 App 模块的子路由。
通过延迟加载,我可以管理它,但是我必须始终在我的 App 模块中再定义一条路线,但我只想在功能模块中定义它。
如果我在没有延迟加载的情况下这样做,那么我在 App 组件中的父路由永远不会被命中。因此,如果我访问http://localhost/brands,它将加载适当的 BrandLisComponent 但没有 LayoutComponent。
有没有办法在功能模块中定义路由并将它们注册为主要主路由模块的子模块?
解决方案
这个概念是你在更高级别的模块中定义一个模块路由,然后在你想要的模块中定义它的子模块。
所以在你的情况下,你需要告诉角度,嘿,当有人去brands
路由时,使用BrandsRoutingModule
路由。
因此,在您的应用程序模块中,您将拥有:
{
path: 'brands',
loadChildren: 'app/modules/brands/brands.module#BrandsModule',
canActivate: [AuthGuard],
canActivateChild: [AuthGuard],
}
这告诉您如果用户访问,您需要加载该模块的路由/brand
。
然后在您的 中BrandsRoutingModule
,您需要将路由定义为:
{
path: '',
component: LayoutComponent,
children: [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', component: BrandListComponent },
{ path: ':id', component: BrandDetailComponent },
{ path: '**', redirectTo: '' }
]
}
因此,无论何时我们路由到/brands
,我们都会将LayoutComponent
视为相对于那个的主要路线,然后 theBrandListComponent
和其他人将作为他的孩子来。但是为了给他的孩子们看,你还需要把这行代码放在你的layout.component.html
:
<router-outlet></router-outlet>
这告诉 Angular,嘿,如果他要去,例如/brands/2
,你需要加载BrandDetailComponent
里面,LayoutComponent
字面意思是他的孩子。
希望能帮助到你。
推荐阅读
- android - Firebase addListenerForSingleValueEvent 下载使用
- javascript - 格式为 yyyy/mm/dd 的本地日期字符串在 javascript 中将 mm 替换为 dd
- android - 在 LinearLayout 中裁剪嵌套的 ImageView
- python - 如何在列表中找到素数最多的数字?
- sql - SQL Server:如何将行中的不同项目转换为列值
- javascript - 如何获取具有非空类名的元素数量
- g++ - 如果 constexpr 在 'constexpr' 之前给出预期的 '(',则 C++17 拒绝编译示例
- android - 我在 android studio 中的应用程序在模拟器和实际设备中都经常崩溃
- django - 每当我单击提交按钮时,我都会在分配之前得到 unboundLocalError 和局部变量“c”引用
- debugging - 代码执行不会在断点处停止