Вложенная маршрутизация: как маршрутизировать внутри маршрута? - PullRequest
1 голос
/ 01 ноября 2019

Я пытаюсь создать вложенный маршрут (я считаю, что это термин для него).

С одним основным маршрутом, который обеспечивает четыре совершенно разные страницы (main-component.html - это только теги выхода маршрутизатора).

А внутри первого маршрута маршрута я хочу иметь одну частьстраницы (центр div) второй маршрут, который будет перемещаться с помощью кнопок со стрелками (вперед и назад). Содержимое этого div сложное (включая взаимодействие с внутренним сервером), поэтому конструкция с * ngIf и различными шаблонами не идеальна).

Можно ли это сделать двумя путями? И если да, то как?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

вы можете создать ленивую загрузку. верхний корневой модуль с маршрутизацией. следующий шаг за шагом Gide.

файл index.html

<body>
   <app-root></app-root>
<body>

, затем создайте файл root.module.ts и root-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { RootComponent } from './root.component';
import { from } from 'rxjs';

const routes: Routes = [
  {
    path: 'account',
    loadChildren: './app/account/account.module#AccountModule',
    data: { preload: true }
  },
  {
    path: 'app',
    loadChildren: './app/app.module#AppModule',
    data: { preload: true }
  },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
  providers: []
})
export class RootRoutingModule { }

then create child account module and account routing. for following code

account-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AccountComponent } from './account.component';
import { LoginComponent } from '../login/login.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';


const routes: Routes = [
  {
    path: '',
    component: AccountComponent,
    children: [
      { path: '', redirectTo: 'login', pathMatch: 'full' },
      { path: 'login', component: LoginComponent },
    ]
  }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class AccountRoutingModule { }
0 голосов
/ 01 ноября 2019

Это можно сделать так:

import { Routes, RouterModule }   from '@angular/router';

import { FirstComponent, 
         SecondComponent,
         ThirdComponent,
         FourthComponent
} from './app.component';

const appRoutes: Routes = [        
    {
        path: 'first',
        component: FirstComponent,
        children:[
        {
         path : 'second',
         component: SecondComponent,
         children:[
           {
            path : 'fourth',
            component: FourthComponent
           },
           {
            path : 'third',
            component: ThirdComponent
           }
         ]
        }
       ]
     },
     {
        path: '',
        redirectTo: '/first',
        pathMatch: 'full'
    },
];

и компоненты:

import { Component }          from '@angular/core';

@Component({
  selector: 'my-app',
  template: `
    <h3 class="title">Routing</h3>
    <hr />
    <router-outlet></router-outlet>
  `
})
export class AppComponent {
}


@Component({
  template: `
    <h3 class="title">FirstComponent</h3>
    <nav>
    </nav>
    <hr />
    <router-outlet></router-outlet>
  `
})
export class FirstComponent {
}

@Component({
  template: `
    <h3 class="title">SecondComponent</h3>
    <nav>
      <a routerLink="second" routerLinkActive="active" >Second</a>
      <a routerLink="third" routerLinkActive="active" >Third</a>
    </nav>
    <hr />
    <router-outlet></router-outlet>
  `
})
export class SecondComponent {
}

@Component({
  template: `
    <h3 class="title">ThirdComponent</h3>
  `
})
export class ThirdComponent {
}

@Component({
  template: `
    <h3 class="title">FourthComponent</h3>
    <hr />
  `
})
export class FourthComponent {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...