вот моя Angular2 структура приложения:Angular2 маршрутизатор: как правильно загружать детей модули с их собственными правилами маршрутизации
Вот часть моего кода. Ниже приведено основное приложение module
приложения Angular2, которое импортирует его правила маршрутизации и дочерний модуль (EdgeModule
) и использует некоторые компоненты, относящиеся к некоторым страницам.
app.module.ts
@NgModule({
declarations: [
AppComponent,
PageNotFoundComponent,
LoginComponent
],
imports: [
...
appRouting,
EdgeModule
],
providers: [
appRoutingProviders,
LoginService
],
bootstrap: [AppComponent]
})
export class AppModule {
}
Вот правила маршрутизации для основного модуля. У него есть пути к странице входа и страница не найдена.
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 });
Вот EdgeModule
, объявляющий компонент, который он использует и импортировать свои собственные правила маршрутизации и 2 дочерних модулей (FirstSectionModule
и SecondSectionModule
).
edge.module.ts
@NgModule({
declarations: [
EdgeComponent,
SidebarComponent,
TopbarComponent
],
imports: [
...
edgeRouting,
FirstSectionModule,
SecondSectionModule
],
providers: [
AuthGuard
]
})
export class EdgeModule {
}
Вот правила маршрутизации для модуля, который загружает, как вы можете видеть, topbar и боковой панели компонентов.
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);
Наконец, это один из модуля два ребенка, которые имеют свои компоненты и импортируют свои правила маршрутизации.
-первых section.module.ts
@NgModule({
declarations: [
FirstSectionComponent,
SomeComponent
],
imports: [
...
firstSectionRouting
],
providers: [
AuthGuard,
]
})
export class FirstSectionModule {
}
Таковы правила маршрутизации для страниц (компонент) 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);
Почти то же самое происходит для second-section.module.ts
и second-section.routing.ts
файлов.
Когда я запускаю приложение, первое, что загружается, - это страница, связанная с FirstSectionComponent
, без боковой панели или верхнего бара.
Не могли бы вы рассказать мне, что не так с моим кодом? В консоли нет ошибок.
попробуйте удалить 'FirstSectionModule' и' SecondSectionModule' из 'edgeModule' import –
Да, делая это, а также изменяя пути в' edge.routing.ts', делайте трюк! Спасибо! – smartmouse
В любом случае это странно, что мне пришлось ставить пути выполнения во время ленивой загрузки модулей, чтобы приложение работало ... – smartmouse