为什么在Angular文档示例中导出RouterModule?

时间:2017-06-07 18:28:14

标签: angular

在Angular路由的文档中,它显示了一个功能模块以及如何使用forChild静态函数。

在该示例中,它显示了由功能模块导入和导出的RouterModule。

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

import { CrisisListComponent }   from './crisis-list.component';
// import { HeroListComponent }  from './hero-list.component';  // <-- delete this line
import { PageNotFoundComponent } from './not-found.component';

const appRoutes: Routes = [
    { path: 'crisis-center', component: CrisisListComponent },
    // { path: 'heroes',     component: HeroListComponent }, // <-- delete this line
    { path: '',   redirectTo: '/heroes', pathMatch: 'full' },
    { path: '**', component: PageNotFoundComponent }
];

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

https://angular.io/docs/ts/latest/guide/router.html#!#remove-duplicate-hero-routes

我不明白为什么导出RouterModule或者在文档中看到任何原因。

1 个答案:

答案 0 :(得分:1)

导出模块实质上是导出在此模块上定义的所有声明(指令,组件,管道)。

路由模块定义了一组特定于路由器的指令:

const ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive];

它们在RouterModule上注册:

@NgModule({declarations: ROUTER_DIRECTIVES, exports: ROUTER_DIRECTIVES})
export class RouterModule {

如果要在模块组件的模板中使用它们,则必须将该模块导入功能模块。但是,您也可以只将RouterModule导入共享模块AppRoutingModule,然后将此共享模块导入其他位置而不导入RouterModule