2017-05-17 205 views
1

我在Angular 4中創建我的第一個應用程序,並且我將AppRoutingModule導入到app.module.ts,據我所知,通過將模塊導入到這個app.module中它變成了「可見「的應用程序的其餘部分。根據這個原則,我沒有在下面的模塊中聲明(retaguarda.module),但是組件retaguarda.component在它的html中有<router-outlet> </ router-outlet>標籤,但是顯示的錯誤要求導入AppRoutingModule Inside rearModule,但是,如上所述,存在在app.module中聲明,不應該在後面可見。模塊呢?角度路線不能與很多模塊一起工作

直接在retaguardamodule中宣告錯誤消失,但導航有bug,所以我認爲問題出現在多個地方。你能幫助我嗎?

app.module.ts:

... 
    @NgModule({ 
     declarations: [ 
     AppComponent 
     ], 
     imports: [ 
     BrowserModule, 
     FormsModule, 
     HttpModule, 

     AppRoutingModule, 
     RetaguardaModule, 
     LoginModule 
     ], 
     providers: [ 
     LoginGuard, 
     LoginService, 
     Ambiente 
     ], 
     bootstrap: [AppComponent] 
    }) 
    export class AppModule { } 

retaguarda.module.ts:

... 
@NgModule({ 
    imports: [ 
    CommonModule, 
    NavbarModule, 
    SidenavModule, 
    CadastrosModule, 
    MovimentacoesModule, 
    AdministracaoModule, 
    RelatoriosModule, 
    ConfiguracoesModule, 
    DashboardModule 
    ], 
    declarations: [ 
    RetaguardaComponent 
    ], 
    exports: [ 
    RetaguardaComponent 
    ] 
}) 
export class RetaguardaModule { } 

app.component.html:

<app-retaguarda></app-retaguarda> 

retaguarda.component.html:

<header> 
    <app-navbar *ngIf="ambiente.usuarioLogado"></app-navbar> 
    <app-sidenav ></app-sidenav> 
</header> 
<div class="container"> 
    <router-outlet></router-outlet> 
</div> 
+0

如果你看一下錯誤(你沒有在你的問題提供)觀察,你會看到,它根本不會問你導入'AppRoutingModule',而是['RouterModule'](https://angular.io/docs/ts/latest/api/router/index/RouterModule-class.html)。原因是你的'AppModule'目前是唯一一個這樣做,只有它的「包含」組件才知道'router-outlet'聲明。我建議在文檔中更熟悉路由器。 –

回答

2

您需要在這裏使用.forRoot().forChild()

從AppRoutingModule.forRoot()開始,並有一條路線給你你的RetaguardaComponent。接下來,讓RetaguardaModule使用.forChild()表示法在模塊內路由。

如果RetaguardaComponent沒有任何子路由並且不是路由本身(即它總是顯示),則考慮將其放入CoreModule並讓AppComponent處理路由。

更多從這個頁面獲得關於如何設置路由更好的掌握:

https://angular.io/docs/ts/latest/guide/router.html#!#why-routing-module

+0

我會閱讀,但appModule應該是我的核心,對不對? 「retaguarda」將是其中一個應用程序的名稱。當我在appModule中聲明所有模塊時,一切正常,但我做了重構,將每個模塊留在其父模塊中。所有這些模塊:CadastrosModule,MovimentacoesModule,AdministracaoModule,RelatoriosModule,ConfiguracoesModule,DashboardModule都是RetaguardaModule的子代。 –

+1

他們實際上推薦一個單獨的'CoreModule'來保持單個(或非路由)組件在一起。這個鏈接可能有所幫助:https://angular.io/docs/ts/latest/guide/ngmodule.html – chrispy

+1

它幾乎聽起來像你的'Retaguarda'實際上只是更多的'AppModule',它們不應該分開。 – chrispy