Почему entryComponents больше не нужен в Angular 9 / ivy compiler? - PullRequest
17 голосов
/ 01 мая 2020

Может кто-нибудь дать четкое объяснение того, почему в компиляторе IVY API компонентов ввода больше не нужен ?. Другими словами, что было изменено внутренне , так что Angular внезапно не понадобилось, что вы собираетесь динамически создавать компонент

1 Ответ

37 голосов
/ 01 мая 2020

ViewEngine

До Ivy компилятор ViewEngine выполнял весь анализ программы на основе конфигураций NgModule и html шаблона , а затем создавал фабрики модулей и компонентов на основе этой глобальной транзитивной информации.

Это означает, что если у вас есть компонент, на который вы не ссылаетесь в шаблоне, и вы не добавили его в массив entryComponents NgModule, то этот компонент не будет скомпилирован, и вы не сможете отображать его динамически, потому что Angular не знает, где получить фабрику для этого компонента.

Как только вы добавите ее, компилятор создаст выделенную фабрику, а также добавит эту фабрику во внутренний HashMap, чтобы ее можно было разрешить через ComponentFactoryResolver.

Ivy

Ivy представила совершенно новый ngts c компилятор, мысленная модель которого заключается в том, что декоратор является компилятором .

Другими словами, общая архитектура ngts c - это набор преобразователей TypeScript : для компонента, канала, ngModule et c.

Эти преобразователи генерируют функции stati c наподобие AppComponent.ɵfac, AppComponent.ɵcmp, что означает, что передаваемый код находится в том же файле, где находится исходный компонент / pipe / ngModule. Таким образом, у нас есть фабрики (весь код, необходимый для создания экземпляров Angular компонентов / труб / модулей) в одном месте, и к ним можно легко получить доступ с помощью этих свойств stati c.

Проще говоря, если есть файл, включенный в компиляцию TypeScript, который имеет класс с декоратором @Component, а затем компилятор ngts c сгенерирует фабрику для этого класса в том же файле.

Как вы можете догадаться, импортируя этот компонент в любой файл и Angular может легко обнаружить свой завод через свойство stati c.

См. также:

...