Saya menggunakan template Angular 4 dengan webpack dan saya memiliki kesalahan ini ketika saya mencoba menggunakan komponen (ConfirmComponent):
Tidak ditemukan pabrik komponen untuk ConfirmComponent. Apakah Anda menambahkannya ke @ NgModule.entryComponents?
Komponen dideklarasikan dalam app.module.server.ts
@NgModule({
bootstrap: [ AppComponent ],
imports: [
// ...
],
entryComponents: [
ConfirmComponent,
],
})
export class AppModule { }
Saya juga app.module.browser.ts
danapp.module.shared.ts
Bagaimana saya bisa memperbaikinya?
ConfirmComponent
detail tidak cukup untuk menjawab pertanyaan AndaJawaban:
Tambahkan ini di
module.ts
,jika ConfirmComponent ada di modul lain, Anda perlu mengekspornya di sana sehingga Anda dapat menggunakannya di luar, tambahkan:
--- Perbarui Angular 9 atau Angular 8 dengan Ivy diaktifkan secara eksplisit ---
Komponen Masuk Dengan Ivy tidak diperlukan lagi dan sekarang sudah usang
--- untuk Angular 9 dan 8 dengan Ivy dinonaktifkan ---
Dalam kasus komponen yang dimuat secara dinamis dan agar ComponentFactory dihasilkan, komponen tersebut juga harus ditambahkan ke entri modulComponents:
sesuai dengan definisi entryComponents
sumber
Lihat detail tentang
entryComponent
:Jika Anda memuat komponen apa pun secara dinamis maka Anda harus memasukkannya ke dalam keduanya
declarations
danentryComponent
:sumber
entryComponents
adalah solusinya - terima kasih!entryComponents
atau menambahkannya keexports
bekerja untuk saya. TETAPI saya dapat memanggil ModalComponent dari beberapa komponen lain yang bukan cucuTL; DR: Layanan di ng6 dengan
providedIn: "root"
tidak dapat menemukan ComponentFactory ketika Komponen tidak ditambahkan dalamentryComponents
dari app.module .Masalah ini juga dapat terjadi jika Anda menggunakan angular 6 dalam kombinasi dengan pembuatan Komponen dalam layanan secara dinamis!
Misalnya, membuat Hamparan:
Masalahnya adalah
definisi, yang menyediakan layanan ini di app.module .
Jadi, jika layanan Anda berada di, misalnya, "OverlayModule", di mana Anda juga mendeklarasikan OverlayExampleComponent dan menambahkannya ke entriComponents, layanan tidak dapat menemukan ComponentFactory for OverlayExampleComponent.
sumber
providedIn
dan bukannya menggunakanproviders
opsi pada modul.Saya memiliki masalah yang sama. Dalam hal
imports [...]
ini sangat penting, karena itu tidak akan berhasil jika Anda tidak mengimporNgbModalModule
.Deskripsi kesalahan mengatakan bahwa komponen harus ditambahkan ke
entryComponents
array dan itu jelas, tetapi pastikan Anda telah menambahkan ini di tempat pertama:sumber
Tambahkan komponen itu ke entryComponents di @NgModule dari modul aplikasi Anda:
serta Deklarasi:
sumber
entryComponents
atau menambahkannya keexports
bekerja untuk saya. TETAPI saya bisa memanggil ModalComponent dari beberapa komponen lain yang bukan cucuTambahkan 'NgbModalModule' di impor dan nama komponen Anda di entryComponents App.module.ts seperti yang ditunjukkan di bawah ini
sumber
entryComponents
atau menambahkannya keexports
bekerja untuk saya. TETAPI saya dapat memanggil ModalComponent dari beberapa komponen lain yang bukan cucuTempatkan komponen yang dibuat secara dinamis ke komponen entry di bawah fungsi @NgModuledecorator.
sumber
entryComponents
modul ng masing-masing yang dideklarasikan.entryComponents
atau menambahkannya keexports
bekerja untuk saya. TETAPI saya bisa memanggil ModalComponent dari beberapa komponen lain yang bukan cucuSaya memiliki masalah yang sama dengan sudut 6, itulah yang bekerja untuk saya:
Jika Anda memiliki layanan seperti ConfirmService , harus dinyatakan dalam penyedia modul saat ini, bukan root
sumber
Saya memiliki masalah yang sama untuk modal bootstrap
Jika ini adalah kasus Anda, tambahkan saja komponen ke deklarasi modul dan entryComponents seperti yang disarankan tanggapan lain, tetapi juga tambahkan ini ke modul Anda
sumber
Kesalahan ini terjadi ketika Anda mencoba memuat komponen secara dinamis dan:
dalam routingModule
atau dalam modul
Untuk memperbaiki kesalahan ini, Anda dapat menambahkan router ke komponen atau menambahkannya ke entryComponents modul.
sumber
Saya memiliki masalah yang sama di Angular7 ketika saya membuat komponen dinamis. Ada dua komponen (TreatListComponent, MyTreatComponent) yang perlu dimuat secara dinamis. Saya baru saja menambahkan array entryComponents ke file app.module.ts saya.
sumber
jika Anda menggunakan perutean di aplikasi Anda
sebagai contoh :
sumber
Dalam kasus saya, saya tidak perlu entriComponents sama sekali - hanya pengaturan dasar seperti yang dijelaskan dalam tautan di bawah ini, tetapi saya perlu memasukkan impor di modul aplikasi utama dan modul terlampir.
https://medium.com/@sunilk/getting-started-angular-6-and-ng-bootstrap-4-4b314e015c1c
Anda hanya perlu menambahkannya ke entriComponents jika komponen akan dimasukkan dalam modal. Dari dokumen:
sumber
error TS2339: Property 'forRoot' does not exist on type 'typeof NgbModule'.
menggunakan sudut 8Saya mendapatkan masalah yang sama dengan ag-grid menggunakan komponen dinamis. Saya menemukan Anda perlu menambahkan komponen dinamis ke modul ag-grid .withComponents []
impor: [StratoMaterialModule, BrowserModule, AppRoutingModule, HttpClientModule, BrowserAnimationsModule, NgbModule.forRoot (), FormsModule, ReactiveFormsModule, AppRoutingModule, AgGridModule.withComponents (ProjectUpdateButtonComponent) ],
sumber
Dalam kasus saya, saya lupa menambahkan
MatDialogModule
impor dalam modul anak.sumber
Untuk klarifikasi di sini. Jika Anda tidak menggunakan
ComponentFactoryResolver
langsung dalam komponen, dan Anda ingin abstrak ke layanan, yang kemudian disuntikkan ke dalam komponen Anda harus memuatnya di bawah penyedia untuk modul itu, karena jika malas dimuat itu tidak akan berfungsi.sumber
Jika Anda masih memiliki kesalahan setelah memberikan kelas dialog komponen
entryComponents
, cobalah untuk meng serve
- restart - itu berhasil untuk saya.sumber
Kesalahan saya adalah memanggil metode terbuka NgbModal dengan parameter yang salah dari .html
sumber
Anda harus mengimpor
NgbModule
dalam modul seperti ini:sumber
entryComponents
sangat penting. Di atas jawaban ini benar.Tapi...
providedIn: 'root'
untukprovidedIn: MyModule
. Sebagai praktik umum yang baik, Anda harus menggunakanprovidedIn: SomeModule
untuk semua layanan dialog yang ada dalam modul.sumber
Saya menggunakan Angular8, dan saya mencoba membuka komponen secara dinamis dari modul lain , Dalam hal ini, Anda perlu
import the module
masuk ke modul yang mencoba membuka komponen, tentu saja di sampingexport
komponen dan daftar ke dalamentryComponents
array seperti jawaban sebelumnya.sumber
Dalam kasus saya, saya memecahkan masalah ini dengan:
1) menempatkan
NgxMaterialTimepickerModule
diapp module imports:[ ]
2) menempatkan
NgxMaterialTimepickerModule
ditestmodule.ts imports:[ ]
3) menempatkan
testcomponent
dideclartions:[ ]
danentryComponents:[ ]
(Saya menggunakan versi sudut 8+)
sumber
Nyatakan semua halaman baru di app.module
sumber