Estou usando o modelo Angular 4 com webpack e tenho esse erro ao tentar usar um componente (ConfirmComponent):
Nenhuma fábrica de componentes encontrada para ConfirmComponent. Você o adicionou a @ NgModule.entryComponents?
O componente é declarado em app.module.server.ts
@NgModule({
bootstrap: [ AppComponent ],
imports: [
// ...
],
entryComponents: [
ConfirmComponent,
],
})
export class AppModule { }
Eu também tenho app.module.browser.ts
eapp.module.shared.ts
Como posso consertar isso?
ConfirmComponent
os detalhes não é suficiente para responder à sua perguntaRespostas:
Adicione isso no seu
module.ts
,se ConfirmComponent estiver em outro módulo, você precisará exportá-lo para lá, para usá-lo fora, adicione:
--- Atualize Angular 9 ou Angular 8 com Ivy explicitamente ativado ---
Os componentes de entrada com Ivy não são mais necessários e agora estão obsoletos
--- para Angular 9 e 8 com Ivy desativada ---
No caso de um componente carregado dinamicamente e para que um ComponentFactory seja gerado, o componente também deve ser adicionado à entrada do móduloComponents:
de acordo com a definição de entryComponents
fonte
Veja os detalhes sobre
entryComponent
:Se você estiver carregando algum componente dinamicamente, precisará colocá-lo em ambos
declarations
eentryComponent
:fonte
entryComponents
foi a solução - obrigado!entryComponents
nem adicioná-lo aoexports
funcionou para mim. MAS eu posso chamar o ModalComponent de alguns outros componentes que não são grandchildsTL; DR: Um serviço em NG6 com
providedIn: "root"
não pode encontrar o ComponentFactory quando o componente não é adicionado naentryComponents
de app.module .Esse problema também pode ocorrer se você estiver usando o angular 6 em combinação com a criação dinâmica de um componente em um serviço!
Por exemplo, criando uma sobreposição:
O problema é o
definição, que fornece esse serviço no app.module .
Portanto, se seu serviço estiver localizado, por exemplo, no "OverlayModule", onde você também declarou o OverlayExampleComponent e o adicionou ao entryComponents, o serviço não poderá encontrar o ComponentFactory for OverlayExampleComponent.
fonte
providedIn
e usando aproviders
opção no módulo.Eu tive o mesmo problema. Nesse caso,
imports [...]
é crucial, porque não funcionará se você não importarNgbModalModule
.A descrição do erro diz que os componentes devem ser adicionados à
entryComponents
matriz e isso é óbvio, mas certifique-se de ter adicionado este em primeiro lugar:fonte
Adicione esse componente a entryComponents no @NgModule do módulo do seu aplicativo:
bem como declarações:
fonte
entryComponents
nem adicioná-lo aoexports
funcionou para mim. MAS eu posso chamar o ModalComponent de alguns outros componentes que não são grandchildsAdicione 'NgbModalModule' nas importações e o nome do componente em entryComponents App.module.ts, como mostrado abaixo
fonte
entryComponents
nem adicioná-lo aoexports
funcionou para mim. MAS eu posso chamar o ModalComponent de alguns outros componentes que não são grandchildsColoque os componentes criados dinamicamente em entryComponents na função @NgModuledecorator.
fonte
entryComponents
respectivo módulo ng declarado.entryComponents
nem adicioná-lo aoexports
funcionou para mim. MAS eu posso chamar o ModalComponent de alguns outros componentes que não são grandchildsEu tenho o mesmo problema com o angular 6, foi o que funcionou para mim:
Se você tiver um serviço como ConfirmService , precisará ser declarado nos provedores do módulo atual em vez de root
fonte
Eu tive o mesmo problema para o modal de inicialização
Se este for o seu caso, basta adicionar o componente às declarações do módulo e entryComponents, como sugerem outras respostas, mas também ao seu módulo
fonte
Este erro ocorre quando você tenta carregar um componente dinamicamente e:
em routingModule
ou no módulo
Para corrigir esse erro, você pode adicionar um roteador ao componente ou ao entryComponents of module.
fonte
Eu tive o mesmo problema no Angular7 quando crio componentes dinâmicos. Existem dois componentes (TreatListComponent, MyTreatComponent) que precisam ser carregados dinamicamente. Acabei de adicionar a matriz entryComponents ao meu arquivo app.module.ts.
fonte
se você usar o roteamento em seu aplicativo
por exemplo :
fonte
No meu caso, eu não precisava de entryComponents - apenas a configuração básica, conforme descrito no link abaixo, mas precisava incluir a importação no módulo principal do aplicativo e no módulo anexo.
https://medium.com/@sunilk/getting-started-angular-6-and-ng-bootstrap-4-4b314e015c1c
Você só precisará adicioná-lo a entryComponents se um componente for incluído no modal. Dos documentos:
fonte
error TS2339: Property 'forRoot' does not exist on type 'typeof NgbModule'.
usando angular 8Eu estava recebendo o mesmo problema com o ag-grid usando componentes dinâmicos. Descobri que você precisa adicionar o componente dinâmico ao módulo ag-grid .withComponents []
importações: [StratoMaterialModule, BrowserModule, AppRoutingModule, HttpClientModule, BrowserAnimationsModule, NgbModule.forRoot (), FormsModule, ReactiveFormsModule, AppRoutingModule, AgGridModule.withComponents (ProjectUpdateButtonComponent) ],
fonte
No meu caso, esqueci de adicionar
MatDialogModule
às importações em um módulo filho.fonte
Para esclarecimentos aqui. Caso você não esteja usando
ComponentFactoryResolver
diretamente no componente e queira abstraí-lo para o serviço, o qual é injetado no componente, você deve carregá-lo nos provedores desse módulo, pois se o carregamento lento não funcionar, ele não funcionará.fonte
Caso você ainda tenha o erro após fornecer a classe de diálogo do componente
entryComponents
, tente reiniciarng serve
- funcionou para mim.fonte
Meu erro foi chamar o método aberto NgbModal com parâmetros incorretos de .html
fonte
Você deve importar o
NgbModule
no módulo assim:fonte
entryComponents
é vital. As respostas acima estão corretas.Mas...
providedIn: 'root'
paraprovidedIn: MyModule
. Como boa prática geral, você deve apenas usar oprovidedIn: SomeModule
para todos os serviços de diálogo que estão nos módulos.fonte
Estou usando o Angular8 e estou tentando abrir o componente dinamicamente, formando outro módulo . Nesse caso, você precisa
import the module
entrar no módulo que está tentando abrir o componente, é claro, alémexport
do componente, e listá-lo naentryComponents
matriz como as respostas anteriores fizeram.fonte
No meu caso eu resolvi esse problema:
1) colocar
NgxMaterialTimepickerModule
emapp module imports:[ ]
2) colocando
NgxMaterialTimepickerModule
emtestmodule.ts imports:[ ]
3) colocar
testcomponent
emdeclartions:[ ]
eentryComponents:[ ]
(Estou usando a versão angular 8+)
fonte
Declarar todas as novas páginas no app.module
fonte