2017-01-09 28 views
7

モジュール間でコンポーネントをどのように共有するのか疑問に思っています。ポイントは次のとおりです。私はアプリ内に2つのモジュール、 'Customersモジュール'と 'Suppliers Module'を持っています。モジュール間のコンポーネントを角2で共有する方法は?

これらのモジュールはどちらも、そのコンポーネント内でAddressComponentとEmailComponentを使用します。また、アドレスと電子メールの両方のインタフェースも使用します。

現在、これらのコンポーネントとインターフェイスを両方のモジュールにコピーして貼り付けたので、現在は重複しています。これは明らかにです。は明らかに間違っています。

両方のモジュールで使用するコンポーネントをインポートする方法が必要です。しかし、私はそれをどうやって行うのか分かりません。

この共有されたもの用に別のモジュールを作成し、両方でインポートする必要がありますか? Angular 2でモジュール間でコンポーネントを共有する正しい方法は何ですか?

答えて

9

すべて共通のComponent/Service/Pipeを持つ共有NgModuleを作成します。そうすることで、コードの重複を避けることができます。プラグイン可能なコードをモジュール化して&をテスト可能にします。

他のモジュールでAddressComponent & EmailComponentを使用するためには、あなたが共有モジュールからそれらをexportする必要があります。

コード

@NgModule({ 
    imports: [CommonModule], 
    declarations: [AddressComponent, EmailComponent], 
    providers: [MySharedService], 
    exports: [AddressComponent, EmailComponent], 
}) 
export class SharedModule() { } 

SharedModuleの消費、あなたがしなければならないすべてはインポートですがSharedModule

@NgModule({ 
    imports: [CommonModule, SharedModule, ... ], 
    providers: [..] 
}) 
export class CustomersModule() { } 
+1

私はこれが動作するとは思わない、コンポーネントを2回宣言することはできません:http://stackoverflow.com/a/39927548/777285 –

+0

@ArnaudPヘッドアップのおかげで、私は冗長宣言を削除しました、ありがとう;) –

+0

実際それは他の方法で:SharedModuleは、コンポーネントを宣言する唯一のものでなければなりません。消費者はSharedModuleをインポートするだけで済みます。 –

関連する問題