Estou trabalhando em um Ionic
aplicativo ( 2.0.0-rc0
) do qual depende angular 2
. Portanto, a nova introdução de ngModules
está incluída. Estou adicionando o meu app.module.ts.
abaixo.
import { NgModule } from '@angular/core';
import { IonicApp, IonicModule } from 'ionic-angular';
import { MyApp } from './app.component';
import { Users } from '../pages/users/users';
@NgModule({
declarations: [
MyApp,
Users
],
imports: [
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
Users
]
})
export class AppModule {}
O que entryComponents
faz aqui? Components
já estão definidos em declarations
. Então, qual é a necessidade de repeti-los? O que aconteceria se eu não incluísse um componente aqui?
declared
dentro,ngModule
mas nunca são usados. angular.io/docs/ts/latest/cookbook/… entrycomponents -Respostas:
Isto é para componentes adicionados dinamicamente que são adicionados usando
ViewContainerRef.createComponent()
. Adicioná-los aentryComponents
informa ao compilador de modelos offline para compilá-los e criar fábricas para eles.Os componentes registrados nas configurações de rota também são adicionados automaticamente
entryComponents
porquerouter-outlet
também são usadosViewContainerRef.createComponent()
para adicionar componentes roteados ao DOM.O compilador de modelos offline (OTC) cria apenas componentes que são realmente usados. Se os componentes não forem usados diretamente nos modelos, o OTC não saberá se eles precisam ser compilados. Com entryComponents, você pode solicitar ao OTC que também compile esses componentes para que estejam disponíveis em tempo de execução.
O que é um componente de entrada? (angular.io)
Documentos do NgModule (angular.io)
Se você não listar um componente adicionado dinamicamente,
entryComponents
receberá uma mensagem de erro sobre uma fábrica ausente porque o Angular não terá criado um.Veja também https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html
fonte
entryComponents
você, você pode dizer ao OTC para compilar esses componentes para que estejam disponíveis em tempo de execução.declarations
ele também deve estar listadoentryComponents
, certo?createComponent
no seu código ou, por exemplo, o roteador que também usa a API thod para adicionar componentes.Você não terá uma explicação melhor do que os documentos angulares: entry-components e ngmodule-faq .
E abaixo está a explicação dos documentos angulares.
fonte
EntryComponent
devemos remover oselector
atributo? (uma vez que não serão utilizados)As outras respostas mencionam isso, mas o resumo básico é:
<my-component />
Os componentes de diálogo de materiais são criados dentro do código TS e não no modelo:
Isso exige que você o registre como um entryComponent:
entryComponents: [MyExampleDialog]
Caso contrário, você receberá um erro:
ERROR Error: No component factory found for MyExampleDialog. Did you add it to @NgModule.entryComponents?
fonte
A matriz entryComponents é usada para definir apenas componentes que não são encontrados no html e criados dinamicamente. Angular requer esta dica para encontrar o componente de entrada e compilá-lo.
Existem dois tipos principais de componentes de entrada:
Para obter informações mais detalhadas sobre os componentes de entrada, consulte angular.io https://angular.io/guide/entry-components
fonte
Um pouco de fundo sobre
entryComponent
entryComponent
é qualquer componente Cargas angulares imperativamente. Você pode declararentryComponent
inicializando-o nasNgModule
ou nas definições de rota.A documentação diz abaixo
Agora, para responder sua pergunta específica sobre
entryComponents
Há
entryComponents
matriz no@NgModule
arquivo. Você pode usar isso para adicionarentryComponents
se o componente é inicializado usandoViewContainerRef.createComponent()
.Ou seja, você está criando componentes dinamicamente e não através da inicialização ou no modelo.
fonte
O Angular 9
entryComponents
não é mais necessário, graças ao Ivy, que permite que esse recurso seja descontinuado e, portanto, pode ser removido das declarações do módulo.APIs e recursos obsoletos -
entryComponents
eANALYZE_FOR_ENTRY_COMPONENTS
não são mais necessáriosHera angular
fonte