2017-05-17 9 views
1

私は最初のアプリケーションをAngular 4で作成しています。私は知っている限り、このapp.moduleにモジュールをインポートすることでAppRoutingModuleをapp.module.tsにインポートしました。アプリケーションの残りの部分に「可視」になります。この原則から、私は下のモジュール(retaguarda.module)で宣言しませんでしたが、コンポーネントのretaguarda.componentはhtmlの<router-outlet> </ router-outlet>タグを持っていますが、表示されたエラーは上記のようにAppRoutingModuleをrearModuleの中にインポートするよう求めますapp.moduleで宣言されていて、後ろから見えてはいけません。モジュールも同様ですか?角のあるルートが多くのモジュールで動作しない

リタガードモジュールで真っ直ぐに宣言すると、エラーは消えますが、ナビゲーションにはバグがありますので、問題は複数の場所にあると思います。あなたもそれで私を助けることができますか?

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'が現在のところ唯一のものであり、' included 'コンポーネントだけが '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」は、アプリケーションの1つの名前になります。私はすべてのモジュールをappModule内で宣言したときすべてが機能していましたが、このモジュールを親モジュール内に残すためにこのリファクタリングを行いました。これらのモジュールはすべて:CadastrosModule、MovimentacoesModule、AdministracaoModule、RelatoriosModule、ConfiguracoesModule、DashboardModuleはRetaguardaModuleの子です。 –

+1

彼らは実際には、単一の(またはルーティングされていない)コンポーネントをまとめて1つの場所にまとめておくために、別々の 'CoreModule'を推奨しています。 https://angular.io/docs/ts/latest/guide/ngmodule.html – chrispy

+1

あなたの 'Retaguarda'は本当にあなたの' AppModule'のほんのちょっとだと分かり、分けてはいけません。 – chrispy

関連する問題