延迟加载路由器 Angular 6
Lazy Loading Router Angular 6
延迟加载有一些问题。所有网址都显示空白页面。
结构:
- app.module.ts
- modules
- router.module.ts
- scenes
- dashboard
- dashboard.module.ts
- router.module.ts
我有
imports: [
RoutingModule,
]
在app.module.ts
routing.module.ts:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{
path: 'dashboard',
loadChildren: '../scenes/dashboard/dashboard.module#DashboardModule'
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
declarations: []
})
export class RoutingModule { }
请注意我有“../scenes”,因为它与 app.module.ts.
位于不同的文件夹中
dashboard.module.ts:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DashboardRoutingModule } from './routing.module';
import { DashboardComponent } from './dashboard.component';
@NgModule({
imports: [
CommonModule,
DashboardRoutingModule
],
declarations: [DashboardComponent]
})
export class DashboardModule { }
routing.module.ts(在仪表板中):
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { DashboardComponent } from './dashboard.component';
const routes: Routes = [
{
path: '',
component: DashboardComponent,
children: [
{ path: 'transactions', loadChildren: './transactions#TransactionsModule' },
]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
declarations: [DashboardComponent]
})
export class DashboardRoutingModule { }
检查了 html-代码,我的路由器插座是空的,所以似乎连 dashboard.component 都无法加载。
也可以使用 index.ts 文件使其工作。我的意思是它能用这个吗?
{ path: 'transactions', loadChildren: './transactions#TransactionsModule' }
Transactions 是一个包含 index.ts 文件的文件夹,它从模块导出所有数据:
export * from './transactions.module';
错误:
GET http://localhost:4200/dashboard/runtime.js net::ERR_ABORTED 404
(Not Found)
解决方案:
我有名称为 main 和 loadChildren: './main#MainModule' 的组件,生成的块的名称是 main.js 但默认情况下它已经存在。
在 app.module 你还需要像这样导入你的子模块。
app.module.ts
imports: [
UserRoutes,
AppRoutingModule
]
用户路线:
const userRoutesModule: Routes = [
{
path: '',
component: UserComponent,
children: [
{
path: 'domanda/edit',
canDeactivate: [EditDomandaGuard],
component: EditDomandaComponent,
},
{path: 'domanda', component: DomandaComponent},
{path: 'help', component: HelpComponent},
]
}
];
@NgModule({
imports: [RouterModule.forChild(userRoutesModule)],
exports: [RouterModule],
})
export class UserRoutes {
}
AppRoutingModule:
const routes: Routes = [
{
path: '',
component: UserComponent,
children: [
{path: 'domanda/edit', component: EditDomandaComponent},
{path: 'domanda', component: DomandaComponent},
{path: 'help', component: HelpComponent},
]
},
{
path: '',
component: GuestComponent,
children: [
{path: 'help', component: HelpComponent},
{path: 'login', component: LoginComponent},
]
},
{path: '**', component: PageNotFoundComponent}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {
}
所以你的 app.module.ts 应该变成:
imports: [
DashboardRoutingModule,
RoutingModule,
]
代码取自我在 github 上的一个存储库,请随时查看它的工作原理:https://github.com/RabbitHols/pca/tree/dev/src/frontend/src/app/module/routes
看来你的代码不错。你的 router-outlet
指令怎么样?你的桅杆在你的 app.component.html 中有一个,在你的 dashboard.component.html
中有一个
I have a similar example at my github repo. It has a full architecture starter: https://github.com/dedd1993/ngx-admin
延迟加载有一些问题。所有网址都显示空白页面。
结构:
- app.module.ts
- modules
- router.module.ts
- scenes
- dashboard
- dashboard.module.ts
- router.module.ts
我有
imports: [
RoutingModule,
]
在app.module.ts
routing.module.ts:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{
path: 'dashboard',
loadChildren: '../scenes/dashboard/dashboard.module#DashboardModule'
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
declarations: []
})
export class RoutingModule { }
请注意我有“../scenes”,因为它与 app.module.ts.
位于不同的文件夹中dashboard.module.ts:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DashboardRoutingModule } from './routing.module';
import { DashboardComponent } from './dashboard.component';
@NgModule({
imports: [
CommonModule,
DashboardRoutingModule
],
declarations: [DashboardComponent]
})
export class DashboardModule { }
routing.module.ts(在仪表板中):
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { DashboardComponent } from './dashboard.component';
const routes: Routes = [
{
path: '',
component: DashboardComponent,
children: [
{ path: 'transactions', loadChildren: './transactions#TransactionsModule' },
]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
declarations: [DashboardComponent]
})
export class DashboardRoutingModule { }
检查了 html-代码,我的路由器插座是空的,所以似乎连 dashboard.component 都无法加载。
也可以使用 index.ts 文件使其工作。我的意思是它能用这个吗?
{ path: 'transactions', loadChildren: './transactions#TransactionsModule' }
Transactions 是一个包含 index.ts 文件的文件夹,它从模块导出所有数据:
export * from './transactions.module';
错误:
GET http://localhost:4200/dashboard/runtime.js net::ERR_ABORTED 404 (Not Found)
解决方案:
我有名称为 main 和 loadChildren: './main#MainModule' 的组件,生成的块的名称是 main.js 但默认情况下它已经存在。
在 app.module 你还需要像这样导入你的子模块。
app.module.ts
imports: [
UserRoutes,
AppRoutingModule
]
用户路线:
const userRoutesModule: Routes = [
{
path: '',
component: UserComponent,
children: [
{
path: 'domanda/edit',
canDeactivate: [EditDomandaGuard],
component: EditDomandaComponent,
},
{path: 'domanda', component: DomandaComponent},
{path: 'help', component: HelpComponent},
]
}
];
@NgModule({
imports: [RouterModule.forChild(userRoutesModule)],
exports: [RouterModule],
})
export class UserRoutes {
}
AppRoutingModule:
const routes: Routes = [
{
path: '',
component: UserComponent,
children: [
{path: 'domanda/edit', component: EditDomandaComponent},
{path: 'domanda', component: DomandaComponent},
{path: 'help', component: HelpComponent},
]
},
{
path: '',
component: GuestComponent,
children: [
{path: 'help', component: HelpComponent},
{path: 'login', component: LoginComponent},
]
},
{path: '**', component: PageNotFoundComponent}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {
}
所以你的 app.module.ts 应该变成:
imports: [
DashboardRoutingModule,
RoutingModule,
]
代码取自我在 github 上的一个存储库,请随时查看它的工作原理:https://github.com/RabbitHols/pca/tree/dev/src/frontend/src/app/module/routes
看来你的代码不错。你的 router-outlet
指令怎么样?你的桅杆在你的 app.component.html 中有一个,在你的 dashboard.component.html
I have a similar example at my github repo. It has a full architecture starter: https://github.com/dedd1993/ngx-admin