Я работаю над Ionic
приложением ( 2.0.0-rc0
), которое зависит от angular 2
. Итак, новое введение ngModules
включено. Я добавляю свое app.module.ts.
ниже.
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 {}
Что entryComponents
здесь делать? Components
уже определены в declarations
. Так зачем их повторять? Что произойдет, если я не добавлю сюда компонент?
declared
вngModule
но никогда не используются. angular.io/docs/ts/latest/cookbook/… entrycomponents -Ответы:
Это для динамически добавляемых компонентов, которые добавляются с использованием
ViewContainerRef.createComponent()
. Добавление их вentryComponents
заставляет автономный компилятор шаблонов скомпилировать их и создать для них фабрики.Компоненты, зарегистрированные в конфигурациях маршрута, также добавляются автоматически,
entryComponents
поскольку ониrouter-outlet
также используютсяViewContainerRef.createComponent()
для добавления маршрутизируемых компонентов в DOM.Автономный компилятор шаблонов (OTC) создает только реально используемые компоненты. Если компоненты не используются напрямую в шаблонах, ОТК не может знать, нужно ли их компилировать. С помощью entryComponents вы можете указать OTC также скомпилировать эти компоненты, чтобы они были доступны во время выполнения.
Что такое входной компонент? (Angular.io)
Документы NgModule (angular.io)
Если вы не
entryComponents
укажете динамически добавляемый компонент, вы получите сообщение об ошибке в связи с отсутствием фабрики, потому что Angular ее не создал.См. Также https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html.
источник
entryComponents
вы можете указать OTC также скомпилировать эти компоненты, чтобы они были доступны во время выполнения.declarations
нем, он также должен быть указанentryComponents
, верно?createComponent
в ваш код или, например, маршрутизатор, который также использует API thod для добавления компонентов.Вы не получите объяснения лучше, чем Angular docs: entry-components и ngmodule-faq .
А ниже приведено объяснение из документов angular.
источник
EntryComponent
должны ли мы удалитьselector
атрибут? (поскольку он не будет использоваться)В других ответах упоминается об этом, но основное резюме:
<my-component />
Компоненты диалога материалов создаются внутри кода TS, а не в шаблоне:
Это требует, чтобы вы зарегистрировали его как entryComponent:
entryComponents: [MyExampleDialog]
В противном случае вы получите ошибку:
ERROR Error: No component factory found for MyExampleDialog. Did you add it to @NgModule.entryComponents?
источник
Массив entryComponents используется для определения только компонентов, которых нет в html и которые создаются динамически. Angular требует, чтобы эта подсказка находила входные компоненты и скомпилировала их.
Есть два основных типа входных компонентов:
Для получения более подробной информации о компонентах входа, пожалуйста, обратитесь к angular.io https://angular.io/guide/entry-components
источник
Немного истории о
entryComponent
entryComponent
- это любой компонент Угловые нагрузки императивно. Вы можете объявитьentryComponent
, загрузив егоNgModule
в определениях маршрутов или в них.В документации говорится ниже
Теперь, чтобы ответить на ваш конкретный вопрос о
entryComponents
В файле есть
entryComponents
массив@NgModule
. Вы можете использовать это, чтобы добавить,entryComponents
если компонент загружается с использованиемViewContainerRef.createComponent()
.То есть вы создаете компоненты динамически, а не путем начальной загрузки или в шаблоне.
источник
Начиная с Angular 9
entryComponents
, больше не требуется, благодаря тому, что Ivy позволяет исключить эту функцию и поэтому может быть удалена из объявлений модулей.Устаревшие API и функции -
entryComponents
иANALYZE_FOR_ENTRY_COMPONENTS
больше не требуемыеУгловой плющ
источник