我想拥有多个routing
模块,以保持我的应用程序干净易读。我目前使用SubComponent
的延迟加载,但我不想这样做。所以我正在寻找一种方法来改变它。无论如何,这是目前正在运行的代码。
我有以下两个路由文件。
app-routing.module.ts
:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'sub', loadChildren: './sub/sub.module#SubModule' }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
sub-routing.module.ts
:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{ path: '', component: SubComponent, children: [
{ path: 'new', component: SubEditComponent }
] },
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
这种方式很好但我不想对此SubComponent
应用延迟加载。所以,理想情况下我想将app-routing.module.ts
更改为:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'sub', component: SubComponent }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
这不起作用并导致以下错误:
ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'sub/new'
Error: Cannot match any routes. URL Segment: 'sub/new'
SubComponent
会大幅增加,我不想因为自己的原因而申请延迟加载。所以无论如何,有没有办法在避免延迟加载的同时使用多个路由文件?
答案 0 :(得分:3)
答案 1 :(得分:3)
您忘记申报到new
const routes: Routes = [
{ path: '', component: HomeComponent },
{
path: 'sub',
component: SubComponent,
children: [
{ path: 'new', component: SubEditComponent }
]
}
];
如果你想保留第二个路由模块
sub-routing.module.ts
const routes: Routes = [
{ path: 'sub', component: SubComponent, children: [
{ path: 'new', component: SubEditComponent }
] },
];
<强> sub.module.ts 强>
@NgModule({
...
imports: [
...
SubRoutingModule,
<强> app.module.ts 强>
@NgModule({
imports: [
...,
AppRoutingModule,
SubModule
<强> Plunker Example 强>
答案 2 :(得分:0)
app.module.ts
@NgModule({
imports: [
...,
SubModule, /* subModule with routing, the order is very important */
AppRoutingModule, // put it at the end
]
}
路由模块的顺序非常重要。
AppRoutingModule.ts
const routes: Routes = [
// filter path '**' will prevent routing to the subModule
{ path: '**', component: PageNotFoundComponent },
];
答案 3 :(得分:-2)
你可以像eminlala所说的那样使用箭头功能,但是如果你运行prod版本它将不起作用。
{ path: 'sub', loadChildren: () => SubModule }
因此,为了使其在prod构建中工作,您需要创建一个导出函数,如下所示。
import SubModule from 'path-to-sub-module';
export function loadSubModule() {
return SubModule;
}
export const SUB_MODULE_ROUTING = {
path: 'sub',
loadChildren: loadSubModule,
};
我用这个conf创建一个文件并将其导入AppRoutingModule,但你可以在AppRoutingModule中编写它。
我希望它有所帮助。