web-dev-qa-db-ja.com

Angular2の別のモジュールからモジュールを継承するにはどうすればよいですか?

だから私はAngular 2 final(2.0.0)を使用していて、アプリケーションのビルドに役立つ一連のディレクティブとコンポーネントを使用してWidgetsModuleを作成し、それを自分のアプリケーションにインポートするとします。 AppModule

import { NgModule }      from '@angular/core';
import { UniversalModule } from 'angular2-universal';

import { WidgetsModule } from '../../../widgets';
import { App, appRouting } from './';

@NgModule({
  imports:      [
    UniversalModule,
    WidgetsModule,
    appRouting
  ],
  providers:    [ AppPresenter ],
  declarations: [ App ],
  exports:      [ ],
  bootstrap:    [ App ]
})
export class AppModule { }

次に、HomeModule、CartModuleなどの子モジュールでウィジェットを使用したいと思います。他のすべてのモジュールにWidgetsModuleをインポートせずに、ウィジェットを使用可能にするにはどうすればよいですか?

import { NgModule }      from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'

import { WidgetsModule } from '../../../widgets';
import { Cart, cartRouting } from './';

@NgModule({
  imports:      [
    CommonModule,
    FormsModule,
    ReactiveFormsModule,
    WidgetsModule,  //<-- I want to avoid doing this in every module
    cartRouting
  ],
  providers:    [ ],
  declarations: [ Cart ]

})
export class CartModule { }

Exports []のディレクティブで行うようにそれを行う方法はありますか?

11
Pstr

独自のWidgetsModule何らかの方法)に直接アクセスする必要があるのと同じように、独自のFormsModuleに直接アクセスする必要があります。ただし、クリーンアップする1つの方法は、SharedModuleから、複数の場所で使用されているすべてのモジュールをエクスポートすることです。次に、SharedModuleをどこにでもインポートできます

@NgModule({
  exports: [
    FormsModule,
    CommonModule,
    WidgetsModule
  ]
})
class SharedModule {}

それらの他のモジュールのいずれかを使用するimports内のコンポーネントを宣言している場合を除いて、それらのいずれかをSharedModuleSharedModuleする必要はありません。

次に、他のすべてのモジュールでは、importsSharedModuleだけです。これは結局それをたくさんきれいにすることになり、あなたはただ一つの共有モジュールを維持する必要があります。

関連項目:

13
Paul Samsotha

モジュールは、他のモジュールで宣言されているコンポーネント、ディレクティブ、またはパイプへのアクセスを継承しません。 AppModuleがインポートするものは、ContactModuleとは無関係であり、その逆も同様です。 ContactComponentが[(ngModel)]とバインドする前に、そのContactModuleはFormsModuleをインポートする必要があります。

ソース:ngmodule

3
Dudi

WidgetsModuleFormsModule(@角度/フォーム)。 WidgetsModuleは、angularによって提供されるユーザー定義モジュールおよびFormsModuleです。それが唯一の違いです。このモジュールは両方とも、いくつかの機能を実行するために使用されます。

したがって、FormsModuleを一度宣言し、他のすべてのモジュールで使用する方法を考えてみてください。その後、問題が解決されることを理解しました。

次のリンクをご覧ください 1つのNgModuleと複数のNgModuleの比較Angular 2

0
Libu Mathew