我正在从官方文档中学习Angular 2的app-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>
随处可用。
答案 0 :(得分:15)
您不需要导出它。这只是为了方便。
如果您将AppRoutingModule
添加到AppModule
,您也会以这种方式隐式导入RouterModule
。否则你需要明确地导入它
@NgModule({
imports: [AppRoutingModule, RouterModule],
})
export class AppModule {}
例如,可以在<router-outlet>
RouterLink
或AppModule
答案 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 { }