2017-10-24 8 views
2

に動作します私は私の頭を叩いていたコードスニペットさ:はどのように再輸出しrouterModuleはここ

//app-routing.module.ts 

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

は異なる経路の配列を含む一定になるようにルートを想定します。

今メインアプリモジュールのインポートなど、それを使用します。だから私は、そのパブリック(エクスポート)申告のクラスあなたが に必要な公式ドキュメント

インポートモジュールからこのことを理解して

//app.module.ts 

@NgModule({ 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    AppRoutingModule 
    ], 
    declarations: [AppComponent, HeroDetailComponent, HeroesComponent, DashboardComponent], 
    bootstrap: [AppComponent], 
    providers: [HeroService] 
}) 
export class AppModule { } 

このモジュールのコンポーネントテンプレートの参照。これはRouterModuleが設定forRootと一緒に他のモジュールにエクスポートされるエクスポート

imports: [ RouterModule.forRoot(routes) ], 
exports: [ RouterModule ] 

Howcome:

は今、私はこの部分を理解していませんか?

+0

この行については何が不明ですか? "エクスポートされたRouterModuleがどのようにエクスポートされるのか" - これは 'exports:[...]'にリストされているためです。 –

+0

であるため、RouterModule.forRoot(ルート)としてインポートし、RouterModuleとしてエクスポートします。私が理解していないことは、この.forRoot(ルート)の部分もどのようにエクスポートされるかということです。 – beNerd

答えて

1

あなたがRouterModule.forRoot(のソースを見れば) `

https://github.com/angular/angular/blob/a0ae1200936d7d51298c0b332edbfb6eefa73b91/packages/router/src/router_module.ts#L144

static forRoot(routes: Routes, config?: ExtraOptions): ModuleWithProviders { 
    return { 
     ngModule: RouterModule, // <<<==== 
     providers: [ 
     ROUTER_PROVIDERS, 
     provideRoutes(routes), 
     { 
      provide: ROUTER_FORROOT_GUARD, 
      useFactory: provideForRootGuard, 
      deps: [[Router, new Optional(), new SkipSelf()]] 
     }, 

あなたはそれがモジュールとプロバイダーを追加していることがわかります。

forRoot()にはプロバイダのみが追加され、再エクスポートは機能しません。

角度ロードをインポートすると、インポートされたモジュールのプロバイダが登録され、インスタンス化されます。 RouterModuleのコンストラクタは、ルータコンストラクタを呼び出すルータサービスを注入します。

+0

私はここで別の問題があります。私はあなたがRouterModuleをエクスポートするとき、正しいルートを持つ '.forRoot()'がそれと一緒にエクスポートされる方法を理解したいと思います... – beNerd

+0

私はそうは思いませんが、それは 'imports:[RouterModule.forRootルート)]、これにより、サービスが登録され、ルートスコープに登録されます。これは、 'AppRoutingModule'が**遅延ロードされていない場合にのみ機能します。 –

+0

だらけ。ありがとう。最後の質問:なぜ再輸出が必要ですか?私たちはRouterModuleを直接app-moduleにインポートしておくことができます。もし私たちができないのであれば、これら2つの行にリンケージがあるかもしれません;) – beNerd

関連する問題