Angular 2.のモジュール間でコンポーネントを共有する方法に疑問があります。ポイントは、アプリに2つのモジュール、「Customers Module」と「Suppliers Module」があることです。
これらのモジュールは両方とも、コンポーネントで、AddressComponentとEmailComponentを使用します。また、両方ともアドレスと電子メールのインターフェースを使用します。
現在、これらのコンポーネントとインターフェイスを両方のモジュールにコピーして貼り付けたため、現在、多くの重複があります。これは明らかにただの間違いです。
両方のモジュールで使用されるコンポーネントをインポートする方法が必要です。しかし、私はそれを行う方法がわかりません。
この共有アイテム用に別のモジュールを作成し、両方にインポートする必要がありますか? Angular 2のモジュール間でコンポーネントを共有する正しい方法は何ですか?
すべての共通NgModule
/Component
/Service
を持つ共有Pipe
を作成します。そうすることで、コードの重複を避けることができます。コードをモジュール化し、プラグ可能かつテスト可能にします。
他のモジュールで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() { }
やあみんな、
In every application some times there were some views which are repeated in the whole application, and for that we have two option:
それが使用されるすべてのビューでどこでも同じコードを繰り返します。または、共通のコンポーネントを作成して、他のすべてのビューと共有できます
繰り返されるビューの機能がどこでも同じである場合、コードを繰り返すことはベストプラクティスではありません。私の意見では、共通のコンポーネントを作成し、それをすべての異なるビュー/モジュールに適用することは素晴らしいアイデアであり、コードの冗長性を減らしてアプリケーションを作成しますきちんときれいに、また何かが変更された場合は、1つのコンポーネントでのみ変更する必要があります。
しかし、どうすればAngular 2アプリケーションでこれを実現できますか?
Angular 2であるため、モジュール設計パターンに従います。つまり、異なるモジュールで異なるビューを保持しますが、問題は単一のコンポーネントを異なるモジュールで共有する方法ですか?
Angular 2では、単一のコンポーネントを異なるモジュールにインポートすることはできません。これを実行しようとすると、コンポーネントをすべてのモジュール内にインポートするだけでは、コンポーネントを異なるモジュールに共有できません。 Angularはエラーをスローします:タイプX(component)は2つのモジュールの宣言の一部です
タイプX(component)は2つのモジュールの宣言の一部です
したがって、この問題を解決するために、コンポーネントを共有する代わりに共有モジュールを作成します。このため、このモジュールを他のすべてのモジュールで共有し、importステートメントを使用して、コンポーネントが自動的に共有された後、他のすべてのモジュールで共有モジュールをインポートしますすべてのモジュール。
以下は、その方法の例です。
SharedModule
@NgModule({インポート:[SomeModule]、宣言:[SharedComponent]、エクスポート:[SharedComponent]})
エクスポートクラスSharedMoule {} app.module.ts
'./shared/shared.moduleから{SharedModule}をインポートします。
@NgModule({imports:[SharedModule]、...})