sma*_*use 33 url-routing nested-routes angular2-routing angular2-modules angular
这是我的Angular2应用程序结构:
这是我的代码的一部分.以下是moduleAngular2应用程序的主要内容,它导入其路由规则和子模块(EdgeModule)并使用与某些页面相关的一些组件.
app.module.ts
@NgModule({
declarations: [
AppComponent,
PageNotFoundComponent,
LoginComponent
],
imports: [
...
appRouting,
EdgeModule
],
providers: [
appRoutingProviders,
LoginService
],
bootstrap: [AppComponent]
})
export class AppModule {
}
Run Code Online (Sandbox Code Playgroud)
以下是主模块的路由规则.它有登录页面和页面找不到的路径.
app.routing.ts
const appRoutes: Routes = [
{ path: 'login', component: LoginComponent },
{ path: '**', component: PageNotFoundComponent }
];
export const appRoutingProviders: any[] = [];
export const appRouting = RouterModule.forRoot(appRoutes, { useHash: true });
Run Code Online (Sandbox Code Playgroud)
这是EdgeModule声明它使用的组件并导入自己的路由规则和2个子模块(FirstSectionModule和SecondSectionModule).
edge.module.ts
@NgModule({
declarations: [
EdgeComponent,
SidebarComponent,
TopbarComponent
],
imports: [
...
edgeRouting,
FirstSectionModule,
SecondSectionModule
],
providers: [
AuthGuard
]
})
export class EdgeModule {
}
Run Code Online (Sandbox Code Playgroud)
以下是加载模块的路由规则,如您所见,顶部栏和侧边栏组件.
edge.routing.ts
Paths['edgePaths'] = {
firstSection: 'firstSection',
secondSection: 'secondSection'
};
const appRoutes: Routes = [
{ path: '', component: EdgeComponent,
canActivate: [AuthGuard],
children: [
{ path: Paths.edgePaths.firstSection, loadChildren: '../somepath/first-section.module#FirstModule' },
{ path: Paths.edgePaths.secondSection, loadChildren: '../someotherpath/second-section.module#SecondModule' },
{ path: '', redirectTo: edgePaths.dashboard, pathMatch: 'full' }
]
}
];
export const edgeRouting = RouterModule.forChild(appRoutes);
Run Code Online (Sandbox Code Playgroud)
最后,这是两个子模块之一,它有其组件并导入其路由规则.
第一section.module.ts
@NgModule({
declarations: [
FirstSectionComponent,
SomeComponent
],
imports: [
...
firstSectionRouting
],
providers: [
AuthGuard,
]
})
export class FirstSectionModule {
}
Run Code Online (Sandbox Code Playgroud)
这些是页面(组件)的路由规则 FirstSectionModule
第一section.routing.ts
Paths['firstSectionPaths'] = {
someSubPage: 'some-sub-page',
someOtherSubPage: 'some-other-sub-page'
};
const appRoutes: Routes = [
{
path: '',
children: [
{ path: Paths.firstSectionPaths.someSubPage, component: someSubPageComponent},
{ path: Paths.firstSectionPaths.someOtherSubPage, component: someOtherSubPageComponent},
{ path: '', component: AnagraficheComponent }
]
}
];
export const firstSectionRouting = RouterModule.forChild(appRoutes);
Run Code Online (Sandbox Code Playgroud)
second-section.module.ts和second-section.routing.ts文件几乎一样.
当我运行应用程序时,首先加载的是与页面相关的内容FirstSectionComponent,没有侧栏或顶栏.
你能告诉我我的代码有什么问题吗?控制台中没有错误.
您可以使用loadChildren尝试此操作,其中homeModule,productMoudle,aboutModule有自己的路由规则.
const routes: Routes = [
{ path: 'home', loadChildren: 'app/areas/home/home.module#homeModule' },
{ path: 'product', loadChildren: 'app/areas/product/product.module#ProductModule' },
{ path: 'drawing', loadChildren: 'app/areas/about/about.module#AboutModule' }
];
export const appRouting = RouterModule.forRoot(routes);
Run Code Online (Sandbox Code Playgroud)
家庭路线规则就像
export const RouteConfig: Routes = [
{
path: '',
component: HomeComponent,
canActivate: [AuthGuard],
children: [
{ path: '', component: HomePage },
{ path: 'test/:id', component: Testinfo},
{ path: 'test2/:id', component: Testinfo1},
{ path: 'test3/:id', component: Testinfo2}
]
}
];
Run Code Online (Sandbox Code Playgroud)
这也称为延迟加载模块.
{ path: 'lazy', loadChildren: 'lazy/lazy.module#LazyModule' }
Run Code Online (Sandbox Code Playgroud)
这里有一些重要的事情需要注意:我们使用属性loadChildren而不是component.我们传递一个字符串而不是一个符号,以避免急切地加载模块.我们不仅定义了模块的路径,还定义了类的名称.LazyModule没有什么特别的,除了它有自己的路由和一个名为LazyComponent的组件.
查看这个与此相关的精彩教程.
https://angular-2-training-book.rangle.io/handout/modules/lazy-loading-module.html
小智 0
不确定我是否正确地解决了问题,但这里有一个小代码片段,我用它来动态生成路由:
应用程序组件.ts:
constructor(private _router: Router) {
}
ngOnInit() {
...
this._router.config[0].children = myService.getRoutes();
this._router.resetConfig(this._router.config);
console.debug('Routes:', this._router.config);
...
}
Run Code Online (Sandbox Code Playgroud)
这不是 OOTB 解决方案,但您可以获得有关当前路线的信息。
| 归档时间: |
|
| 查看次数: |
37131 次 |
| 最近记录: |