Angular2:RouterModule的导出,为什么需要它?

时间:2017-01-24 08:53:26

标签: angular angular2-routing

我正在从官方文档中学习Angular 2app-routing。我正在通过以下代码。

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

export const routes: Routes = [
  { path: '', redirectTo: 'contact', pathMatch: 'full'},
  { path: 'crisis', loadChildren: 'app/crisis/crisis.module#CrisisModule' },
  { path: 'heroes', loadChildren: 'app/hero/hero.module#HeroModule' }
];

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

它会为AppRoutingModule创建routes并为其定义@angular/router。我无法理解的部分是为什么我们需要再次导出RouterModule?我相信它是核心角度模块之一,可以通过导入<option>随处可用。

3 个答案:

答案 0 :(得分:15)

您不需要导出它。这只是为了方便。 如果您将AppRoutingModule添加到AppModule,您也会以这种方式隐式导入RouterModule。否则你需要明确地导入它

@NgModule({
  imports: [AppRoutingModule, RouterModule],
})
export class AppModule {}

例如,可以在<router-outlet>

中声明的组件中使用RouterLinkAppModule

答案 1 :(得分:1)

您需要路由模块吗?

路由模块取代根或功能模块中的路由配置。在路由模块中或在模块本身内配置路由,但不在两者中配置。

路由模块是一种设计选择,当配置复杂且包含专门的防护和解析器服务时,其价值最为明显。当实际配置变得简单时,它看起来有点过分。

当配置很简单时,一些开发人员会跳过路由模块(例如,AppRoutingModule),并将路由配置直接合并到配套模块中(例如,AppModule)。

选择一种模式或另一种模式,并始终如一地遵循该模式。

为了保持一致性,大多数开发人员应始终实施路由模块。当配置变得复杂时,它会保持代码清洁。它使测试功能模块更容易。它的存在使人们注意到模块被路由的事实。这是开发人员期望查找和扩展路由配置的地方。

答案 2 :(得分:0)

你可以用下面的另一种方式来做,但上面的系统更具可读性和干净的代码概念

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { Routes, RouterModule } from '@angular/router';
import { AppComponent } from './app.component';

const routes: Routes = [
  { path: '', redirectTo: 'contact', pathMatch: 'full'},
  { path: 'crisis', loadChildren: 'app/crisis/crisis.module#CrisisModule' },
  { path: 'heroes', loadChildren: 'app/hero/hero.module#HeroModule' }
];



@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    RouterModule.forRoot(routes),
    BrowserModule,
    FormsModule,
    HttpModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }