[解決済み] Angular 2の「コンポーネント」は既知の要素ではありません。
質問
AppModule内で作成したコンポーネントを他のモジュールで使おうとしています。しかし、次のようなエラーが発生します。
"アンキャッチ(プロミス内)。Error: テンプレートパースエラーです。
'contacts-box' は既知の要素ではありません。
- contacts-box'がAngularコンポーネントである場合、それがこのモジュールの一部であることを確認します。
- contacts-box' が Web Component である場合、このメッセージを抑制するために、このコンポーネントの '@NgModule.schemas' に 'CUSTOM_ELEMENTS_SCHEMA' を追加してください。
私はpagesディレクトリにページを保持し、各ページは異なるモジュール(例えば、顧客モジュール)に保持され、各モジュールは複数のコンポーネント(顧客-リスト-コンポーネント、顧客-追加-コンポーネントなど)を持っています。私はそれらの部品の中で私のContactBoxComponentを使用したいと思う(従って例えばcustomers-add-componentの中で)。
ご覧のように、contacts-box コンポーネントは widgets ディレクトリ内に作成したので、基本的には AppModule 内にあります。ContactBoxComponentのimportをapp.module.tsに追加して、AppModuleのdeclarations listに入れました。それはうまくいかなかったので、私は私の問題をグーグルし、同様にエクスポートリストにContactBoxComponentを追加しました。しかし、それは役に立ちませんでした。また、CustomersAddComponentにContactBoxComponentを入れてから、別のもの(別のモジュールから)に入れようとしましたが、複数の宣言があるというエラーが出ました。
何が足りないのでしょうか?
解決方法は?
このようなエラーが発生した場合、私が行う5つのステップをご紹介します。
- 名前に間違いはありませんか?(コンポーネントで定義されているセレクタも確認してください。)
- モジュールでコンポーネントを宣言していますか?
- 他のモジュールにある場合は、そのコンポーネントをエクスポートしますか?
- 他のモジュールにある場合、そのモジュールをインポートしますか?
- cliを再起動しますか?
ユニットテスト中にエラーが発生した場合、コンポーネントの宣言またはモジュールのインポートを
TestBed.configureTestingModule
また、CustomersAddComponentにContactBoxComponentを入れ、さらに別のもの(別のモジュール)に入れようとしましたが、複数の宣言があるとのエラーが出ました。
コンポーネントを2回宣言することはできません。新しい別のモジュールでコンポーネントを宣言し、エクスポートする必要があります。次に、そのコンポーネントを使用したいすべてのモジュールで、この新しいモジュールをインポートする必要があります。
新しいモジュールを作るべきときと、そうでないときの見極めは難しいですね。私は通常、再利用するコンポーネントごとに新しいモジュールを作成します。ほとんどどこでも使うコンポーネントがあるときは、それらをひとつのモジュールに入れます。再利用しないコンポーネントがあるときは、どこかで必要になるまで別のモジュールは作りません。
すべてのコンポーネントを1つのモジュールに収めたくなるかもしれませんが、これはパフォーマンス的によくありません。 開発中、モジュールは変更があるたびに再コンパイルしなければなりません。モジュールが大きければ大きいほど(コンポーネントが多ければ多いほど)、より多くの時間がかかる。大きなモジュールに小さな変更を加えることは、小さなモジュールに小さな変更を加えることよりも時間がかかるのです。
関連
-
[解決済み】Angular2 CLI エラー "@angular/compiler-cli" パッケージが正しくインストールされていません。
-
[解決済み】本番モードを有効にするには?
-
[解決済み] Angular2 Router: Error: Cannot find primary outlet to load 'InboxComponent'.
-
[解決済み] Angular CLIでコンポーネントの名前を変更する方法は?
-
[解決済み] typescriptを使用して、同じhtml DOM要素で「シングルクリック」と「ダブルクリック」を処理する方法:Angular 2または4?
-
[解決済み] Angular 2の「コンポーネント」は既知の要素ではありません。
-
[解決済み] Angular2: [(ngModel)] with [ngModelOptions]="{standalone: true}"を使って、モデルのプロパティへの参照にリンクさせる。
-
[解決済み] ngModel' は 'input' の既知のプロパティではないため、バインドできません。
-
[解決済み] formGroup' は 'form' の既知のプロパティではないため、バインドできません。
-
[解決済み] コンポーネントテンプレートで要素を選択するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】angularモジュールでModule has no exported memberエラー
-
[解決済み] Angular 4: コンポーネントファクトリが見つかりません。@NgModule.entryComponents に追加しましたか?
-
[解決済み] Angular2 Router: Error: Cannot find primary outlet to load 'InboxComponent'.
-
[解決済み] チョキダーからのエラー(C:┣ᴗ┣)。Error: EBUSY: resource busy or locked, lstat 'C:\DumpStack.log.tmp.
-
[解決済み] Angular 2.0 翻訳パイプが見つかりません。
-
[解決済み] Angular 2でディレイを作成する方法
-
[解決済み] "rxjs" observable.throw は関数ではありません - Angular4
-
[解決済み] パーサエラーです。式が期待される場所で補間({{}})を得た
-
[解決済み] Angular2 Selectorが、ネストしたComponentのどの要素にもマッチしない。
-
[解決済み] モジュール 'ngx-cookie-service' が見つかりません。