gpt4 book ai didi

angular - 为什么在 Angular 9/ivy 编译器中不再需要 entryComponents?

转载 作者:行者123 更新时间:2023-12-03 07:29:07 26 4
gpt4 key购买 nike

谁能清楚地解释为什么在 IVY 编译器中,入口组件 API 不再需要了?换句话说,发生了什么变化内部 所以Angular突然不需要提醒你要动态创建组件

最佳答案

View 引擎

在 Ivy 之前, ViewEngine 编译器基于 NgModule 配置和 html 模板进行整个程序分析 然后根据这个全局传递信息生产模块和组件工厂。

这意味着如果您有一个没有在模板中引用的组件并且您没有将它添加到 entryComponents NgModule 的数组,那么这个组件将不会被编译,你也不能动态渲染它,因为 Angular 不知道从哪里获得这个组件的工厂。

添加后,编译器会生成专门的工厂,并将该工厂添加到内部 HashMap 中,以便通过 ComponentFactoryResolver 解析。 .

Ivy

Ivy 推出了全新的 ngtsc 编译器是哪个心智模型,装饰器是编译器 .

也就是说,ngtsc的整体架构是一个一组 TypeScript 转换器 : 用于组件、管道、ngModule 等。

这些转换器发出静态函数,如 AppComponent.ɵfac , AppComponent.ɵcmp就地意味着转译的代码驻留在原始组件/管道/ngModule 所在的同一文件中。所以我们在同一个地方有工厂(实例化 Angular 组件/管道/模块所需的所有代码),并且可以通过这些静态属性轻松访问它们。

简而言之,如果 TypeScript 编译中包含的文件的类具有 @Component装饰器然后 ngtsc 编译器将在同一文件中为此类发出工厂。

你可以猜到,如果你在任何文件中导入该组件,Angular 就可以通过静态属性轻松发现它的工厂。

也可以看看:

  • DESIGN DOC(Ivy): Compiler Architecture
  • DESIGN DOC (Ivy): Separate Compilation
  • 关于angular - 为什么在 Angular 9/ivy 编译器中不再需要 entryComponents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61541876/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com