繁体   English   中英

Angular 路由器不显示我的组件

[英]Angular Router Doesn't Display My Component

我有一个简单的 Angular 2 应用程序,其模块(InformationPagesModule 模块)包含两个延迟加载组件(Info1 组件和 Info2 组件)。 我想在浏览器中输入以下路由时加载该组件:

http://localhost:4200/info1 - 加载 Info1Component

http://localhost:4200/info2 - 加载 Info2Component

这里的兴趣班:

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 { }

应用程序路由.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 { }

信息-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 { }

信息页面-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时,会显示一个空白页面?

我应该如何在我的应用程序中配置路由以使其正常工作?

非常感谢!

在您的app-routing.module.ts中,您想声明一个父路由到一个延迟加载模块的所有路由。 这意味着您可能希望 map 所有以/info开头的路由到您的information-pages-routing.module.ts 您将在延迟加载模块中声明的到您的组件(info1 和 info2)的路由。

应用程序路由.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 { }

您现在可以通过路由/info/info1访问Info1Component并通过路由 /info/ info2访问 Info2Component 如果您希望通过路由/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

使用这种方式而不是使用模块级路由,使用 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 { }

如果您使用此信息-pages-routing.module.ts 不再需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM