Je cherche une solution avec Angular 2 pour le scénario expliqué ci-dessous:
Dans ce scénario, la navigation du haut contient des liens pour charger des sous-modules et des sous-navigations pour mettre à jour le contenu du sous-module.
Les URL doivent correspondre comme suit:
Le module d'application (et le composant d'application) contient une barre de navigation supérieure permettant de naviguer vers différents sous-modules. Le modèle de composant d'application pourrait alors ressembler à ceci.
<top-navbar></top-navbar>
<router-outlet></router-outlet>
Mais voici la complexité. J'ai besoin que mes sous-modules aient une disposition similaire avec une barre de navigation de deuxième niveau et leur propre prise de routeur pour charger leurs propres composants.
<sub-navbar></sub-navbar>
<router-outlet name='sub'></router-outlet>
J'ai essayé toutes les options et cherché partout mais je ne trouvais pas de solution pour avoir un modèle par défaut (comme un composant d'application) dans le sous-module avec la sortie du routeur et aussi pour charger le contenu du sous-module dans la sortie du routeur interne sans perdre le sous-navigateur. .
J'apprécierais n'importe quelle entrée ou idées
La page html ressemblera à ceci.
Page principale
<top-navbar></top-navbar>
<router-outlet></router-outlet>
Page de sous-module
<sub-navbar></sub-navbar>
<router-outlet name='sub'></router-outlet>
en cliquant sur la navigation dans la barre supérieure de navigation, le point de vente principal de la route va router.
en cliquant sur la sous-barre de navigation, le routeur-sortie [sous] routera respectivement.
HTML, c'est bien, l'astuce viendra lors de l'écriture de app.routing
app.routing.ts
const appRoutes: Routes = [
{
path: 'login',
component: LoginComponent
},
{ path: 'home',
component: homeComponent,
children: [
{
path: 'module1',
component: module1Component,
children: [
{
path: 'submodule11',
component: submodule11Component,
},
{
path: '',
redirectTo: 'submodule11',
pathMatch: 'full'
}
]
},
{
path: 'module2',
component: module2omponent,
children: [
{
path: 'submodule21',
component: submodule21Component,
},
{
path: '',
redirectTo: 'submodule21',
pathMatch: 'full'
}
]
}
]
},
{
path: 'about',
component: aboutComponent
}
]
J'espère que cela vous aidera.
Plus de détails https://angular.io/guide/router
Utilisation:
RouterModule.forChild()
...
<router-outlet name="sub"></router-outlet>
...
[routerLink]="[{ outlets: { sub: [subRouteName] } }]"
Exemple complet:
HTML
<div class="tabs tinyscroll">
<button *ngFor="let tab of tabs"
[routerLink]="[{ outlets: { sub: [tab.name] } }]"
routerLinkActive="selected">
<span>{{ tab.label }}</span>
</button>
</div>
<section>
<router-outlet name="sub"></router-outlet>
</section>
app.module.ts
imports: [
...
RouterModule.forChild([
{
path: 'registers',
component: RegistersComponent,
children: [
{path: 'vehicles', component: VehiclesComponent, outlet: 'sub'},
{path: 'drivers', component: DriversComponent, outlet: 'sub'},
{path: 'bases', component: BasesComponent, outlet: 'sub'},
{path: 'lines', component: LinesComponent, outlet: 'sub'},
{path: 'users', component: UsersComponent, outlet: 'sub'},
{path: 'config', component: ConfigComponent, outlet: 'sub'},
{path: 'companies', component: CompaniesComponent, outlet: 'sub'}
],
canActivate: [AuthGuard]
}
]),
...
vous devez mentionner le nom de la prise dans les itinéraires, mentionner le nom de votre routeur dans l'acheminement, comme ceci: "sortie: 'sub"
routes: Routes = [
{path:'', redirectTo: 'login', pathMatch: 'full'},
{
path: 'login',
component: LoginComponent,
},
{ path: 'home',
component: AppComponent,
children: [
{path: 'home/pdf',component: SideMenuPage,outlet:"sub" },
{path:'home/addFileUp',component:SidePageAdd,outlet:"sub"},
]},
];