角度路由不适用于许多模块

时间:2017-05-17 20:35:26

标签: html angular typescript angular2-routing

我在Angular 4中创建了我的第一个应用程序,并且我将AppRoutingModule导入了app.module.ts,据我所知,通过将模块导入到这个app.module中它变为&#34;可见&#34 34;到应用程序的其余部分。根据这个原则,我没有在下面的模块中声明(retaguarda.module),但组件retaguarda.component在其html中有<router-outlet> </ router-outlet>标签,显示的错误要求导入AppRoutingModule Inside rearModule,但是,如上所述,在app.module中声明,后面不应该看到。模块也是?

直接在retaguardamodule中声明错误消失,但是导航是有错误的,所以我认为问题出现在多个地方。你能帮我解决这个问题吗?

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>

1 个答案:

答案 0 :(得分:2)

您需要在此使用.forRoot().forChild()

从AppRoutingModule.forRoot()开始,只需一条路线就可以获得RetaguardaComponent。接下来,让RetaguardaModule使用.forChild()表示法在您的模块中进行路由。

如果RetaguardaComponent没有任何子路线而且本身没有路线(即它总是显示),那么请考虑将其放入CoreModule并让AppComponent处理路由。

从此页面阅读更多内容,以便更好地掌握如何设置路由:

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