it-swarm-eu.dev

Angular 2 - Instradamento del submodule e <router-outlet> nidificati

Sto cercando una soluzione con Angular 2 per lo scenario spiegato di seguito:

enter image description here

In questo scenario, top-nav contiene collegamenti per caricare i sottomoduli e sub-nav ha collegamenti per aggiornare i contenuti del sottomodulo.

Gli URL dovrebbero mappare come:

  • / home => carica la pagina iniziale nell'output del router del componente principale
  • / submodule => carica il sottomodulo nell'output del router componente principale e per impostazione predefinita dovrebbe mostrare la home page del sottomodulo e la barra di navigazione secondaria
  • / submodule/feature => carica la funzione all'interno dell'output del router del submodule

Il modulo dell'app (e il componente dell'app) contiene una barra di navigazione superiore per spostarsi verso diversi sottomoduli e il modello del componente app potrebbe assomigliare a questo

<top-navbar></top-navbar>
<router-outlet></router-outlet>

Ma qui è la complessità. Ho bisogno che i miei sottomoduli abbiano un layout simile con una barra di navigazione di secondo livello e il loro router privato per caricare i propri componenti.

<sub-navbar></sub-navbar>
<router-outlet name='sub'></router-outlet>

Ho provato tutte le opzioni e cercato dappertutto, ma non ho trovato una soluzione per avere un modello predefinito (come componente app) nel sottomodulo con router outlet e caricare il contenuto del sottomodulo nel router interno senza perdere il sub-nav .

Gradirei qualsiasi input o idee

58
Ron F

La pagina html avrà questo aspetto.

Pagina principale

<top-navbar></top-navbar>
<router-outlet></router-outlet>

Pagina sottomodulo

<sub-navbar></sub-navbar>
<router-outlet name='sub'></router-outlet>

facendo clic su navigazione nella barra di navigazione in alto, la rotta principale verrà indirizzata rispettivamente.

mentre si fa clic su sotto-navbar, il router-outlet [sub] verrà indirizzato rispettivamente.

HTML va bene, il trucco verrà nella scrittura di 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
  }
]

Spero ti possa aiutare.

Maggiori dettagli https://angular.io/guide/router

38
Aswin KV

Uso:

RouterModule.forChild()
...
<router-outlet name="sub"></router-outlet>
...
[routerLink]="[{ outlets: { sub: [subRouteName] } }]"

Esempio completo:

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]
      }
    ]),
...
14
thxmxx

devi menzionare il nome dell'outlet nelle rotte menziona il nome del tuo router nel routing come questo "outlet:" 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"},
        ]},
 

];
        
0
Nambi N Rajan