2017-05-17 121 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