2017-11-29 12 views
0

カスタマイズするためにいくつかの設定を渡すことができる汎用モジュールを作りたいと思います。たとえば、ルートモジュールに私はconfigxオブジェクトに基づいて構築されたルートでモジュールを返します同じコンフィグレーションで同じNgModuleを再利用

@NgModule({ 
    imports: [ 
     moduleFactory(config1), 
     moduleFactory(config2), 
     moduleFactory(config3) 
    ], 
}) 
export class AppModule { } 

moduleFactoryのようなものを持っていると思います。これらのモジュールは、設定オブジェクトに基づいてカスタマイズされたコンテンツを表示するいくつかのビューを提供します。どうやってやるの?

+0

'ModuleWithProviders'を使用して実行する方法がありますが、ランタイム実行が必要なロジックを' moduleFactory'に入れると、AOTで動作しません –

+0

@ AngularInDepth.com私が抱えている主な問題は、 AOT。今はルートを定義するメインの 'NgModule'しか持っていません。ルート設定の配列では、ルートオブジェクトの設定を返す関数を呼び出します。' ng serve'を実行するとエラーが出ます:シンボル値を静的に解決する際にエラーが発生しました。関数 'admin'を呼び出すと、関数呼び出しはサポートされません。 コードを少なくするためにAOTを放棄する価値はありますか?私はAOTをよく理解していないし、それを使う利点を知らない。 – csbenjamin

+0

ええ、静的解析はコードを評価しないと予想されます。いいえ、AOTを放棄する価値はありません。コンパイラは、あなたがAOTに同梱されていないブラウザに出荷されるAngularコードの約40%を取得します。また、コンパイル済みのコンポーネントを使用すると、起動時間も短縮されます –

答えて

0

私はloadChildrenを使って解決策を考え出しました。

{ 
    path:'companies', 
    loadChildren: 'app/admin/admin.module#AdminModule', 
    data:{ 
     // the config1 
    } 
}, 

{ 
    path:'users', 
    loadChildren: 'app/admin/admin.module#AdminModule', 
    data:{ 
     // the config2 
    } 
} 

その後、AdminModuleに私はdataプロパティを読み取ることができます:メインルートの設定では、私はこのようなものを持っています。また、AdminModuleルートで絶対ルートパスを定義しようとしていましたが、loadChildrenソリューションでは相対パスを定義できるため、静的に定義されたルートを持つことができます。私はルート/usersとルート/users/item;id=1を持つ特定のユーザーとユーザーのテーブルをロードすることができ、それに

{ 
    path: '', 
    component: TablePageComponent, 
}, 
{ 
    path: 'item', 
    component: FormPageComponent, 
} 

:私はAdminModule路線でこのような何かを持っています。同じことが、企業やその他のものにも当てはまります。

関連する問題