Używam szablonu Angular 4 z pakietem webpack i mam ten błąd, gdy próbuję użyć komponentu (ConfirmComponent):
Nie znaleziono fabryki komponentów dla ConfirmComponent. Czy dodałeś go do @ NgModule.entryComponents?
Komponent jest zadeklarowany w app.module.server.ts
@NgModule({
bootstrap: [ AppComponent ],
imports: [
// ...
],
entryComponents: [
ConfirmComponent,
],
})
export class AppModule { }
Mam również app.module.browser.ts
iapp.module.shared.ts
Jak mogę to naprawić?
ConfirmComponent
dane, nie wystarczy odpowiedzieć na twoje pytanieOdpowiedzi:
Dodaj to do swojego
module.ts
,jeśli ConfirmComponent znajduje się w innym module, musisz go tam wyeksportować, abyś mógł go używać na zewnątrz, dodaj:
--- Zaktualizuj Angular 9 lub Angular 8 z jawnie włączonym Ivy ---
Wejściowe elementy z bluszczem nie są już wymagane, a teraz są przestarzałe
--- dla Angulara 9 i 8 z wyłączonym Ivy ---
W przypadku dynamicznie ładowanego komponentu oraz w celu wygenerowania ComponentFactory komponent należy również dodać do wpisu modułu:
zgodnie z definicją entryComponents
źródło
Zobacz szczegóły na temat
entryComponent
:Jeśli ładujesz dowolny składnik dynamicznie następnie trzeba umieścić go w oba
declarations
ientryComponent
:źródło
entryComponents
Rozwiązaniem było dodanie moich utworzonych komponentów - dziękuję!entryComponents
ani dodanie go doexports
pracował dla mnie. ALE mogę wywołać ModalComponent z innych komponentów, które nie są wnukamiTL; DR: Usługa w NG6 ze
providedIn: "root"
nie można znaleźć ComponentFactory gdy składnik nie dodaje się wentryComponents
od app.module .Ten problem może również wystąpić, jeśli używasz kątowej 6 w połączeniu z dynamicznym tworzeniem komponentu w usłudze!
Na przykład, tworzenie nakładki:
Problemem jest
definicja, która udostępnia tę usługę w app.module .
Jeśli więc Twoja usługa znajduje się na przykład w „OverlayModule”, w którym również zadeklarowałeś OverlayExampleComponent i dodałeś go do entryComponents, usługa nie może znaleźć ComponentFactory dla OverlayExampleComponent.
źródło
providedIn
i zamiast tego używającproviders
opcji na module.Miałem ten sam problem. W tym przypadku
imports [...]
jest to kluczowe, ponieważ nie będzie działać, jeśli nie zaimportujeszNgbModalModule
.Opis błędu mówi, że komponenty należy dodać do
entryComponents
tablicy i jest to oczywiste, ale upewnij się, że dodałeś ten w pierwszej kolejności:źródło
Dodaj ten składnik do entryComponents w @NgModule modułu aplikacji:
a także deklaracje:
źródło
entryComponents
ani dodanie go doexports
pracował dla mnie. ALE mogę wywołać ModalComponent z innych komponentów, które nie są wnukamiDodaj „NgbModalModule” w importach i nazwę swojego komponentu w entryComponents App.module.ts, jak pokazano poniżej
źródło
entryComponents
ani dodanie go doexports
pracował dla mnie. ALE mogę wywołać ModalComponent z innych komponentów, które nie są wnukamiUmieszczaj komponenty tworzone dynamicznie w entryComponents w funkcji @NgModuledecorator.
źródło
entryComponents
odpowiedniego modułu ng, który został zadeklarowany.entryComponents
ani dodanie go doexports
pracował dla mnie. ALE mogę wywołać ModalComponent z innych komponentów, które nie są wnukamiMam ten sam problem z kanciastym 6, to właśnie działało dla mnie:
Jeśli masz usługę taką jak ConfirmService , musisz ją zadeklarować u dostawców bieżącego modułu zamiast root
źródło
Miałem ten sam problem z modalem bootstrap
W takim przypadku wystarczy dodać komponent do deklaracji modułu i entryComponents, jak sugerują inne odpowiedzi, ale także dodać to do modułu
źródło
Ten błąd występuje, gdy próbujesz załadować komponent dynamicznie i:
w routingModule
lub w module
Aby naprawić ten błąd, możesz dodać router do komponentu lub dodać go do entryComponents modułu.
źródło
Miałem ten sam problem w Angular7, kiedy tworzyłem komponenty dynamiczne. Istnieją dwa składniki (TreatListComponent, MyTreatComponent), które należy ładować dynamicznie. Właśnie dodałem tablicę entryComponents do mojego pliku app.module.ts.
źródło
jeśli używasz routingu w swojej aplikacji
na przykład :
źródło
W moim przypadku wcale nie potrzebowałem entryComponents - wystarczy podstawowa konfiguracja, jak opisano w linku poniżej, ale musiałem uwzględnić import zarówno w głównym module aplikacji, jak i w module dołączającym.
https://medium.com/@sunilk/getting-started-angular-6-and-ng-bootstrap-4-4b314e015c1c
Musisz dodać go do entryComponents, jeśli komponent zostanie włączony do modalu. Z dokumentów:
źródło
error TS2339: Property 'forRoot' does not exist on type 'typeof NgbModule'.
używając kątowego 8Ten sam problem występował w przypadku ag-grid przy użyciu komponentów dynamicznych. Odkryłem, że musisz dodać komponent dynamiczny do modułu ag-grid .withComponents []
import [StratoMaterialModule, BrowserModule, AppRoutingModule, HttpClientModule, BrowserAnimationsModule, NgbModule.forRoot () FormsModule, ReactiveFormsModule, AppRoutingModule, AgGridModule.withComponents (ProjectUpdateButtonComponent) ]
źródło
W moim przypadku zapomniałem dodać
MatDialogModule
do importu w module potomnym.źródło
Dla wyjaśnienia tutaj. W przypadku, gdy nie używasz
ComponentFactoryResolver
bezpośrednio w komponencie i chcesz wyodrębnić go do usługi, która jest następnie wstrzykiwana do komponentu, musisz załadować go do dostawców dla tego modułu, ponieważ jeśli leniwie załadowany, nie będzie działał.źródło
Jeśli po wprowadzeniu klasy okna dialogowego komponentu nadal występuje błąd
entryComponents
, spróbuj uruchomić ponownieng serve
- zadziałało to dla mnie.źródło
Mój błąd wywołał metodę otwartą NgbModal z niepoprawnymi parametrami z .html
źródło
Powinieneś zaimportować
NgbModule
do modułu w następujący sposób:źródło
entryComponents
to istotne. Powyższe odpowiedzi są prawidłowe.Ale...
providedIn: 'root'
naprovidedIn: MyModule
. Jako ogólną dobrą praktykę powinieneś po prostu użyćprovidedIn: SomeModule
dla wszystkich usług dialogowych, które są w modułach.źródło
Korzystam z Angular8 i próbuję dynamicznie otwierać komponent z innego modułu. W tym przypadku musisz
import the module
wejść do modułu, który próbuje otworzyć komponent, oczywiście opróczexport
komponentu i wyświetlić go wentryComponents
tablicy tak jak poprzednie odpowiedzi.źródło
W moim przypadku rozwiązałem ten problem poprzez:
1) umieszczenie
NgxMaterialTimepickerModule
wapp module imports:[ ]
2) umieszczenie
NgxMaterialTimepickerModule
wtestmodule.ts imports:[ ]
3) umieszczenie
testcomponent
wdeclartions:[ ]
ientryComponents:[ ]
(Używam wersji kątowej 8+)
źródło
Zadeklaruj wszystkie nowe strony w app.module
źródło