Saya mencoba menggunakan komponen yang saya buat di dalam AppModule di modul lain. Saya mendapatkan kesalahan berikut:
"Tidak tertangkap (berjanji): Kesalahan: Kesalahan parse templat:
'kontak-kotak' bukan elemen yang dikenal:
- Jika 'kontak-kotak' adalah komponen Angular, maka verifikasi bahwa itu adalah bagian dari modul ini.
- Jika 'kontak-kotak' adalah Komponen Web maka tambahkan 'CUSTOM_ELEMENTS_SCHEMA' ke '@ NgModule.schemas' dari komponen ini untuk menekan pesan ini.
Struktur proyek saya cukup sederhana:
Saya menyimpan halaman saya di direktori halaman, di mana setiap halaman disimpan dalam modul yang berbeda (misalnya modul pelanggan) dan setiap modul memiliki banyak komponen (seperti komponen daftar pelanggan, komponen tambah pelanggan, dan sebagainya). Saya ingin menggunakan ContactBoxComponent saya di dalam komponen-komponen (jadi di dalam pelanggan-tambah-komponen misalnya).
Seperti yang Anda lihat, saya membuat komponen kontak-kotak di dalam direktori widget sehingga pada dasarnya di dalam AppModule. Saya menambahkan impor ContactBoxComponent ke app.module.ts dan memasukkannya ke dalam daftar deklarasi AppModule. Itu tidak berhasil jadi saya mencari masalah saya di Google dan menambahkan ContactBoxComponent ke daftar ekspor juga. Tidak membantu Saya juga mencoba meletakkan ContactBoxComponent di CustomersAddComponent dan kemudian di yang lain (dari modul yang berbeda) tapi saya mendapat kesalahan dengan mengatakan ada beberapa deklarasi.
Apa yang saya lewatkan?
Jawaban:
Ini adalah 5 langkah yang saya lakukan ketika saya mendapat kesalahan seperti itu.
Anda tidak dapat mendeklarasikan komponen dua kali. Anda harus mendeklarasikan dan mengekspor komponen Anda dalam modul terpisah baru. Selanjutnya Anda harus mengimpor modul baru ini di setiap modul yang ingin Anda gunakan komponen Anda.
Sulit untuk mengatakan kapan Anda harus membuat modul baru dan kapan Anda seharusnya tidak. Saya biasanya membuat modul baru untuk setiap komponen yang saya gunakan kembali. Ketika saya memiliki beberapa komponen yang saya gunakan hampir di mana-mana saya meletakkannya dalam satu modul. Ketika saya memiliki komponen yang tidak saya gunakan kembali, saya tidak akan membuat modul terpisah sampai saya membutuhkannya di tempat lain.
Meskipun mungkin tergoda untuk menempatkan semua komponen Anda dalam satu modul, ini buruk untuk kinerja. Saat mengembangkan, modul harus mengkompilasi ulang setiap kali perubahan dilakukan. Semakin besar modul (lebih banyak komponen) semakin banyak waktu yang dibutuhkan. Membuat perubahan kecil ke modul besar membutuhkan lebih banyak waktu daripada membuat perubahan kecil dalam modul kecil.
sumber
Saya punya masalah serupa. Ternyata
ng generate component
(menggunakan CLI versi 7.1.4) menambahkan deklarasi untuk komponen turunan ke AppModule, tetapi tidak ke modul TestBed yang mengemulasi itu.Aplikasi sampel "Tour of Heroes" berisi
HeroesComponent
pemilih denganapp-heroes
. Aplikasi berlari dengan baik ketika menjabat, taping test
diproduksi pesan kesalahan ini:'app-heroes' is not a known element
. MenambahkanHeroesComponent
secara manual ke deklarasi diconfigureTestingModule
(inapp.component.spec.ts
) menghilangkan kesalahan ini.sumber
Saya baru saja mengalami masalah yang sama persis. Sebelum mencoba beberapa solusi yang diposting di sini, Anda mungkin ingin memeriksa apakah komponennya benar - benar tidak berfungsi. Bagi saya, kesalahan ditampilkan di IDE saya (WebStorm), tetapi ternyata kode tersebut bekerja dengan sempurna ketika saya menjalankannya di browser.
Setelah saya mematikan terminal (yang menjalankan ng servis) dan me-restart IDE saya, pesan berhenti muncul.
sumber
Saya memiliki masalah yang sama dengan lebar php versi 2017.3. Ini memperbaikinya untuk saya: forum dukungan intellij
Itu adalah layanan kesalahan lebar @angular bahasa: https://www.npmjs.com/package/@angular/language-service
sumber
Dalam kasus saya, aplikasi saya memiliki beberapa lapisan modul, jadi modul yang saya coba impor harus ditambahkan ke induk modul yang benar-benar menggunakannya
pages.module.ts
, bukanapp.module.ts
.sumber
Saya mendapat masalah yang sama, dan itu terjadi karena modul fitur yang berbeda termasuk komponen ini secara tidak sengaja. Ketika dihapus dari fitur lain, itu berhasil!
sumber
Masalah dalam kasus saya adalah tidak adanya deklarasi komponen dalam modul, tetapi bahkan setelah menambahkan deklarasi kesalahan tetap ada. Saya telah menghentikan server dan membangun kembali seluruh proyek dalam Kode VS untuk kesalahan untuk pergi.
sumber
Kerangka berbelit-belit ini membuatku gila. Mengingat Anda mendefinisikan komponen khusus dalam templat bagian komponen lain dari modul SAMA, maka Anda tidak perlu menggunakan ekspor dalam modul (mis. App.module.ts). Anda hanya perlu menentukan deklarasi di direktif @NgModule dari modul yang disebutkan di atas:
Anda TIDAK perlu mengimpor
JsonInputComponent
(dalam contoh ini) keAppComponent
(dalam contoh ini) untuk menggunakanJsonInputComponent
komponen khusus dalamAppComponent
templat. Anda hanya perlu awalan komponen khusus dengan nama modul yang kedua komponen telah didefinisikan (misalnya aplikasi):Perhatikan app-json-input bukan json-input!
Demo di sini: https://github.com/lovefamilychildrenhappiness/AngularCustomComponentValidation
sumber
Saya memulai Angular dan dalam kasus saya, masalahnya adalah saya tidak menyimpan file setelah menambahkan pernyataan 'impor'.
sumber
Modul rute (tidak melihat ini sebagai jawaban)
Pertama periksa: jika Anda telah mendeklarasikan- dan mengekspor komponen di dalam modulnya, impor modul tempat Anda ingin menggunakannya dan beri nama komponen dengan benar di dalam HTML.
Jika tidak, Anda mungkin kehilangan modul di dalam modul perutean:
Ketika Anda memiliki modul perutean dengan rute yang merutekan ke komponen dari modul lain, penting bahwa Anda mengimpor modul itu dalam modul rute tersebut. Jika tidak, CLI Angular akan menampilkan kesalahan:
component is not a known element
.Sebagai contoh
1) Memiliki struktur proyek berikut:
2) Di dalam
todos-routing.module.ts
Anda memiliki rute keedit.todo.component.ts
(tanpa mengimpor modulnya):Rute hanya akan bekerja dengan baik! Namun ketika mengimpor
sidebar.module.ts
dalamedit-todo.module.ts
Anda akan mendapatkan error:app-sidebar is not a known element
.Solusi: Karena Anda telah menambahkan rute ke
edit-todo.component.ts
dalam langkah 2, Anda harus menambahkannyaedit-todo.module.ts
sebagai impor, setelah itu komponen bilah samping yang diimpor akan berfungsi!sumber
Saya menghadapi masalah yang sama. Dalam kasus saya, saya lupa mendeklarasikan komponen Induk di app.module.ts
Sebagai contoh jika Anda menggunakan
<app-datapicker>
pemilih dalamToDayComponent
template, Anda harus mendeklarasikan keduanyaToDayComponent
danDatepickerComponent
di app.module.tssumber
Seharusnya Anda memiliki komponen:
product-list.component.ts:
Dan Anda mendapatkan kesalahan ini:
app.component.ts:
Pastikan Anda mengimpor komponen:
sumber
Pertanyaan ini mungkin tampak tua dan aneh, tetapi ketika saya mencoba memuat modul (lazy loading) dan mendapatkan kesalahan yang sama, saya menyadari bahwa saya kehilangan klausa ekspor untuk komponen yang dikirim sebagai bagian dari modul yang lebih besar.
Tautan Angular.io ini menjelaskan mengapa : Komponen / Layanan di dalam modul, tetap pribadi (atau dilindungi) secara default. Untuk mempublikasikannya, Anda harus mengekspornya.
Memperluas jawaban @Robin Djikof dengan contoh kode live-love @ , inilah yang secara teknis tidak ada dalam kasus saya (Angular 8):
sumber