[英]Routing on nested modules in Angular without children?
我有 3 个模块:
AppModule
是我的根模块,ModuleAModule
,ModuleBModule
。 每个模块都有自己的routing.module.ts
。 我想构建像ROOT/module-a/module-b
这样的路由
我准备了 2 个版本(有和没有children
属性):
这些文件对于两个版本都有差异:
问题:我想独立存储路径:不使用children[]
属性。 如果可能的话。
我不在AppRoutingModule
中为ModuleARoutingModule
使用children[]
。 但为什么我不能在ModuleARoutingModule
和ModuleBRoutingModule
之间做同样的事情?
app.routing.ts
const routes: Routes = [
{ path: '', redirectTo: '', pathMatch: 'full' }
];
@NgModule({
imports: [
CommonModule,
RouterModule.forRoot(routes),
ModuleARoutingModule,
],
exports: [ RouterModule ]
})
module-a.routing.ts
const routes: Routes = [
{ path: 'module-a', component: ModuleAComponent }
];
@NgModule({
imports: [
CommonModule,
RouterModule.forChild(routes),
ModuleBRoutingModule,
],
exports: [RouterModule]
})
module-b.routing.ts
const routes: Routes = [
{ path: 'module-b', component: ModuleBComponent }
];
@NgModule({
imports: [
CommonModule,
RouterModule.forChild(routes),
],
exports: [RouterModule]
})
但我明白了
错误:未捕获(承诺):错误:无法匹配任何路线。 URL 段:'module-a/module-b' 错误:无法匹配任何路由。 URL 段:'module-a/module-b'
要解决此问题:
module-a.routing.ts
中添加了children[]
属性,并从导入中删除ModuleBRoutingModule
。 module-a.routing.ts
const routes: Routes = [
{
path: 'module-a',
component: ModuleAComponent,
children: [
// via loadChildren or component
{ path: 'module-b', loadChildren: '../module-b/module-b.module#ModuleBModule' },
]
},
];
@NgModule({
imports: [
CommonModule,
RouterModule.forChild(routes),
// ModuleBRoutingModule,
],
exports: [RouterModule]
})
module-b.routing.ts
(使path=''
为空)。 module-b.routing.ts
const routes: Routes = [
{ path: '', component: ModuleBComponent }
];
我可以在没有children[]
财产的情况下解决这个问题,还是我总是需要使用children
?
欢迎来到计算器!
如果您有多个级别的路由器插座,则只需要children
属性。
你试过这个吗:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { ModuleARoutingModule } from './modules/module-a/module-a.routing.module';
import { ModuleBRoutingModule } from './modules/module-b/module-b.routing.module';
const routes: Routes = [
{ path: '', redirectTo: '', pathMatch: 'full', }
];
@NgModule({
imports: [
ModuleARoutingModule,
ModuleBRoutingModule,
RouterModule.forRoot(routes),
],
exports: [ RouterModule ]
})
export class AppRoutingModule { }
更新:
我花了一些时间在你的 stackblitz 代码上,你确实需要使用children
,因为你有嵌套的路由器插座。 如果删除嵌套的路由器插座,则不需要使用children
。
我有您的非工作代码的更新和工作版本,这里没有children
: https ://stackblitz.com/edit/embedded-routes-without-children-kd1hms
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.