Angular Маршрутизатор не отображает мой компонент - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть простое Angular 2 приложение с модулем (модуль InformationPagesModule), которое содержит два ленивых компонента загрузки (компонент Info1 и компонент Info2). Я хочу загрузить эти компоненты при вводе следующих маршрутов в браузере:

http://localhost: 4200 / info1 - загружает информационный компонент

http://localhost : 4200 / info2 - загружает инфо-компонент

здесь классы интересов:

app.component. html

<router-outlet></router-outlet>

app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import { InformationPagesModule } from './information-pages/information-pages.module';

@NgModule({
  declarations: [
    AppComponent,
    HomeComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    SharedModule,
    InformationPagesModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

app-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule, Router } from '@angular/router';
import { HomeComponent } from './home/home.component';

const routes: Routes = [
  {path:'', component: HomeComponent},
  {path:'info1', loadChildren: './information-pages/information-pages.module#InformationPagesModule'},
  {pathMatch:'full', path:'info2', loadChildren: './information-pages/information-pages.module#InformationPagesModule'},
  { path: '**', redirectTo: '' }
];
@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],

})
export class AppRoutingModule { }

information-pages.module .ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

import { InformationPagesRoutingModule } from './information-pages-routing.module';
import { Info1Component } from './info1/info1.component';
import { Info2Component } from './info2/info2.component';

@NgModule({
  imports: [
    CommonModule,
    InformationPagesRoutingModule
  ],
  declarations: [Info1Component, Info2Component]
})
export class InformationPagesModule { }

information-pages-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { Info1Component } from './info1/info1.component';
import { Info2Component } from './info2/info2.component';

const routes: Routes = [
  {path:'info1', component: Info1Component},
  {path:'info2', component: Info2Component}
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class InformationPagesRoutingModule { }

Мой вопрос: почему при входе в некоторые маршруты / info1 или / info2, отображается пустая страница?

Как мне настроить маршруты в моем приложении, чтобы оно работало?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

В вашем app-routing.module.ts вы хотите объявить один родительский маршрут ко всем маршрутам одного лениво загруженного модуля. Это означает, что вы можете сопоставить все маршруты, начинающиеся с / info , с вашими information-pages-routing.module.ts . Маршруты к вашим компонентам (info1 и info2) вы будете объявлять внутри лениво загруженного модуля.

app-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule, Router } from '@angular/router';
import { HomeComponent } from './home/home.component';

const routes: Routes = [
  { path:'', component: HomeComponent },
  { path: 'info', loadChildren: './information-pages/information-pages.module#InformationPagesModule' },
  { path: '**', redirectTo: '' }
];
@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],

})
export class AppRoutingModule { }

Файл information-pages-routing.module.ts остается прежним

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { Info1Component } from './info1/info1.component';
import { Info2Component } from './info2/info2.component';

const routes: Routes = [
  {path:'info1', component: Info1Component},
  {path:'info2', component: Info2Component}
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class InformationPagesRoutingModule { }

Теперь вы сможете получить доступ к Info1Component по маршруту / info / info1 и Info2Component по маршруту / info / info2 . Если вы хотите sh получить доступ к своим компонентам по маршрутам / info1 и / info2 , вы можете либо создать два загруженных с отложенным временем модуля, либо просто перенаправить / info1 на / info / info1


Вы можете также рассмотреть возможность загрузки дочерних модулей следующим образом:

{ path: 'info', loadChildren: () => import('./information-pages/information-pages.module').then(m => m.InformationPageModule) }

Вместо

{ path: 'info', loadChildren: './information-pages/information-pages.module#InformationPagesModule' }

Для Более подробную информацию см. в официальной документации https://angular.io/guide/lazy-loading-ngmodules

0 голосов
/ 27 апреля 2020

Используйте этот способ вместо маршрутизации на уровне модуля, используйте AppRoutingModule для маршрутизации ваших компонентов.

import { NgModule } from '@angular/core';
import { Routes, RouterModule, Router } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { Info1Component } from './info1/info1.component';
import { Info2Component } from './info2/info2.component';

const routes: Routes = [
  {path:'', component: HomeComponent},
  {path:'info1', component: Info1Component},
  {path:'info2', component: Info2Component},
  { path: '**', redirectTo: '' }
];
@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],

})
export class AppRoutingModule { }

Если вы используете этот information-pages-routing.module.ts больше не требуется.

...