I'm menggunakan Sudut 4 template dengan webpack dan aku telah kesalahan ini ketika saya mencoba untuk menggunakan komponen (ConfirmComponent):
Tidak ada komponen pabrik yang ditemukan untuk ConfirmComponent. Apakah anda tambahkan ke @NgModule.entryComponents?
Komponen dinyatakan dalam app.modul.server.ts
naskah @NgModule({ bootstrap: [ AppComponent ], impor: [ // ... ], entryComponents: [ ConfirmComponent, ], }) ekspor kelas AppModule { }
Saya juga app.modul.browser.ts
dan aplikasi.modul.bersama.ts
Bagaimana saya bisa memperbaikinya?
Tambahkan ini di modul.ts
,
naskah deklarasi: [ AppComponent, ConfirmComponent ]
jika ConfirmComponent dalam modul lain, anda perlu untuk ekspor itu ada sehingga anda dapat menggunakannya di luar, tambahkan:
naskah ekspor: [ ConfirmComponent ]
Dalam kasus yang dimuat secara dinamis komponen dan dalam rangka untuk ComponentFactory yang akan dihasilkan, komponen juga harus ditambahkan untuk modul entryComponents:
naskah deklarasi: [ AppComponent, ConfirmComponent ], entryComponents: [ConfirmComponent],
menurut definisi entryComponents
Menetapkan daftar komponen yang harus dikumpulkan ketika modul ini didefinisikan. Untuk masing-masing komponen yang tercantum di sini, Sudut akan membuat ComponentFactory dan menyimpannya dalam ComponentFactoryResolver.
Lihat detail tentang entryComponent
:
Jika anda memuat setiap komponen dinamis maka anda harus meletakkannya di kedua deklarasi
dan entryComponent
:
naskah @NgModule({ impor: [...], ekspor: [...], entryComponents: [ConfirmComponent,..], deklarasi: [ConfirmComponent,...], penyedia: [...] })
TL;DR: layanan di ng6 dengan providedIn: "root"
tidak bisa menemukan ComponentFactory ketika Komponen yang tidak ditambahkan dalam entryComponents
dari aplikasi.modul.
Masalah ini juga dapat terjadi jika anda menggunakan sudut 6 dalam kombinasi dengan secara dinamis menciptakan Komponen dalam layanan!
Misalnya, membuat Overlay:
``naskah @Suntik({ providedIn: "root" }) ekspor kelas OverlayService {
konstruktor(pribadi _overlay: Overlay) {}
openOverlay() { const overlayRef = ini._createOverlay(); const portal = new ComponentPortal(OverlayExampleComponent);
overlayRef.melampirkan(portal).contoh; } } `` Masalahnya adalah
providedIn: "root"
definisi, yang menyediakan layanan ini di aplikasi.modul.
Jadi jika layanan anda berada di, misalnya, "OverlayModule", di mana anda juga menyatakan OverlayExampleComponent dan ditambahkan ke entryComponents, layanan tidak dapat menemukan ComponentFactory untuk OverlayExampleComponent.
Saya memiliki masalah yang sama. Dalam hal ini impor [...]
adalah penting, karena itu tidak't bekerja jika anda don't impor NgbModalModule
.
Deskripsi Error yang mengatakan bahwa komponen-komponen yang harus ditambahkan ke entryComponents
array dan jelas, tapi pastikan anda telah menambahkan satu ini di tempat pertama:
imports: [
...
NgbModalModule,
...
],
Saya memiliki masalah yang sama dengan sudut 6, yang's apa yang bekerja untuk saya :
@NgModule({
...
entryComponents: [ConfirmComponent],
providers:[ConfirmService]
})
Jika anda memiliki layanan seperti ConfirmService, harus menyatakan dalam penyedia modul saat ini bukan root
Tempat komponen-komponen yang dibuat secara dinamis untuk entryComponents di bawah @NgModuledecorator fungsi.
@NgModule({
imports: [
FormsModule,
CommonModule,
DashbaordRoutingModule
],
declarations: [
MainComponent,
TestDialog
],
entryComponents: [
TestDialog
]
})
Saya memiliki masalah yang sama untuk modal bootstrap
impor { NgbModal } dari '@ng-bootstrap/ng-bootstrap';
Jika ini adalah kasus anda hanya menambahkan komponen ke modul deklarasi dan entryComponents sebagai tanggapan lain menyarankan, tetapi juga menambahkan ini ke modul anda
impor { NgbModule } dari '@ng-bootstrap/ng-bootstrap';
imports: [
NgbModule.forRoot(),
...
]
Kesalahan ini terjadi ketika anda mencoba untuk me-load komponen dinamis dan:
di routingModule
const routes: Routes = [{ path: 'confirm-component', component: ConfirmComponent,data: {}}]
atau dalam modul
entryComponents: [
ConfirmComponent
}
Untuk memperbaiki kesalahan ini, anda dapat menambahkan router ke komponen atau menambahkannya ke entryComponents dari modul.
Aku punya masalah yang sama di Angular7 ketika saya membuat komponen-komponen dinamis. Ada dua komponen(TreatListComponent, MyTreatComponent) yang perlu dimuat secara dinamis. Saya hanya menambahkan entryComponents array untuk aplikasi saya.modul.ts file.
entryComponents: [
TreatListComponent,
MyTreatComponent
],
jika anda menggunakan routing dalam aplikasi anda
pastikan untuk Menambahkan komponen baru ke dalam jalur routing
misalnya :
const appRoutes: Routes = [
{ path: '', component: LoginComponent },
{ path: 'home', component: HomeComponent },
{ path: 'fundList', component: FundListComponent },
];
Saya mendapatkan masalah yang sama dengan ag-grid menggunakan komponen-komponen dinamis. Saya menemukan anda perlu menambahkan komponen dinamis untuk ag-grid modul .withComponents[]
impor: [ StratoMaterialModule, BrowserModule, AppRoutingModule, HttpClientModule, BrowserAnimationsModule, NgbModule.forRoot(), FormsModule, ReactiveFormsModule, AppRoutingModule, AgGridModule.withComponents(ProjectUpdateButtonComponent) ],
Dalam kasus saya saya didn't perlu entryComponents sama sekali - hanya setup dasar seperti yang dijelaskan dalam link di bawah ini, tapi aku harus mencakup impor di kedua aplikasi utama modul dan melampirkan modul.
imports: [
NgbModule.forRoot(),
...
]
https://medium.com/@sunilk/getting-started-angular-6-and-ng-bootstrap-4-4b314e015c1c
Anda hanya perlu menambahkannya ke entryComponents jika komponen yang akan disertakan dalam modal. Dari docs:
Anda dapat melewati komponen yang ada sebagai isi dari jendela modal. Di hal ini mengingat untuk menambahkan konten komponen sebagai entryComponents bagian dari anda NgModule.
Untuk klarifikasi di sini. Dalam kasus anda tidak menggunakan ComponentFactoryResolver
langsung pada komponen, dan anda ingin abstrak ke layanan, yang kemudian disuntikkan ke dalam komponen anda harus memuat bawah penyedia untuk modul tersebut, karena jika malas dimuat itu tidak't bekerja.