Angular 路由器延迟加载:以相同路径开始的两个不同模块
Angular router lazy loading: two different modules which start with the same path
我有两个模块,每个模块都有两条子路由。
第一个模块使用如下路由:
项目/:id
项目/:id/print
第二个:
项目/:id/edit
项目/:id/marketing
所以我猜想如何为这种情况进行配置:
export const appRoutes: Routes = [
{
loadChildren: './features/item-details/item-details.module#ItemDetailsModule',
path: 'items/:id'
},
{
loadChildren: './features/item-management/item-management.module#ItemManagementModule',
path: 'items/:id'
}
];
我不想合并这两个模块,因为它们几乎没有共同点。
而且我对将它分成 4 个不同模块的想法也不满意。
您对不同的模块使用相同的路径,为什么不切换路径,您将拥有一个更加独立的模块和关注点。
export const appRoutes: Routes = [
{
loadChildren: './features/item-details/item-details.module#ItemDetailsModule',
path: 'items/details/:id'
},
{
loadChildren: './features/item-management/item-management.module#ItemManagementModule',
path: 'items/management/:id'
}
];
实际上,使用 UrlMatcher 有一种方法可以做到这一点。
您可以检查目标 url 是否加载模块。
https://angular.io/api/router/UrlMatcher
const managmentMatcher = (segments: UrlSegment[]) => {
return /^\/*items\/\d+\/(edit|marketings)\/*.test(segments.join('/')) ?
{ consumed: segments.slice(0, 2), posParams: { id: segments[1] } } : null;
}
export const appRoutes: Routes = [
// special routes
{
loadChildren: './features/item-management/item-management.module#ItemManagementModule',
matcher: managmentMatcher
},
// default routing for items/:id
{
loadChildren: './features/item-details/item-details.module#ItemDetailsModule',
path: 'items/:id'
}
];
我有两个模块,每个模块都有两条子路由。
第一个模块使用如下路由:
项目/:id
项目/:id/print
第二个:
项目/:id/edit
项目/:id/marketing
所以我猜想如何为这种情况进行配置:
export const appRoutes: Routes = [
{
loadChildren: './features/item-details/item-details.module#ItemDetailsModule',
path: 'items/:id'
},
{
loadChildren: './features/item-management/item-management.module#ItemManagementModule',
path: 'items/:id'
}
];
我不想合并这两个模块,因为它们几乎没有共同点。
而且我对将它分成 4 个不同模块的想法也不满意。
您对不同的模块使用相同的路径,为什么不切换路径,您将拥有一个更加独立的模块和关注点。
export const appRoutes: Routes = [
{
loadChildren: './features/item-details/item-details.module#ItemDetailsModule',
path: 'items/details/:id'
},
{
loadChildren: './features/item-management/item-management.module#ItemManagementModule',
path: 'items/management/:id'
}
];
实际上,使用 UrlMatcher 有一种方法可以做到这一点。 您可以检查目标 url 是否加载模块。 https://angular.io/api/router/UrlMatcher
const managmentMatcher = (segments: UrlSegment[]) => {
return /^\/*items\/\d+\/(edit|marketings)\/*.test(segments.join('/')) ?
{ consumed: segments.slice(0, 2), posParams: { id: segments[1] } } : null;
}
export const appRoutes: Routes = [
// special routes
{
loadChildren: './features/item-management/item-management.module#ItemManagementModule',
matcher: managmentMatcher
},
// default routing for items/:id
{
loadChildren: './features/item-details/item-details.module#ItemDetailsModule',
path: 'items/:id'
}
];