2017-01-24 3 views
4

Я изучаю Angular 2app-routing из официальной документации. Я просматриваю следующий фрагмент кода.Angular2: Экспорт RouterModule, зачем он нужен?

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 для него. Часть, которую я не могу понять, - Зачем нам снова искать RouterModule? Я считаю, что это один из основных угловых модулей и который доступен во всем мире путем импорта @angular/router.

+0

Я также спросил себя. Спасибо за это. –

ответ

7

Вам не нужно экспортировать его. Это просто для удобства. Если вы добавите AppRoutingModule в AppModule, вы также неявно импортируете RouterModule таким образом. В противном случае вам нужно будет импортировать его явно

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

, например, чтобы иметь возможность использовать <router-outlet> или RouterLink в компонентах, объявленных в AppModule

+0

Спасибо за ответ. У вас есть ссылки, где я могу подробно прочитать о RouterModule? Я хочу посмотреть, что происходит под капотом. Как работает маршрутизация углов? –

+1

https://angular.io/docs/ts/latest/guide/router.html и https://leanpub.com/router –

+1

Это настолько запутывает по сети! вы первый упоминаете об этом! Спасибо –

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

Вам нужен модуль маршрутизации?

Модуль маршрутизации заменяет конфигурацию маршрутизации в корневом или функциональном модуле. Либо настройте маршруты в модуле маршрутизации, либо в самом модуле, но не в обоих.

Модуль маршрутизации - это выбор дизайна, значение которого наиболее очевидно, когда конфигурация сложна и включает в себя специализированные службы защиты и распознавания. Это может показаться излишним, когда фактическая конфигурация мертва проста.

Некоторые разработчики пропускают модуль маршрутизации (например, AppRoutingModule), когда конфигурация проста и объединяет конфигурацию маршрутизации непосредственно в модуль-компаньон (например, AppModule).

Выберите один шаблон или другой и последовательно следуйте этому рисунку.

Большинство разработчиков всегда должны внедрять модуль маршрутизации для согласованности. Он сохраняет код в чистоте, когда конфигурация становится сложной. Это облегчает тестирование модуля функций. Его существование обращает внимание на то, что модуль маршрутизируется. Именно разработчики ожидают найти и расширить конфигурацию маршрутизации.

Смежные вопросы