ngModule中的entryComponents是什么?

ngModule中的entryComponents是什么?

ionic3 教程(一)安装和配置
我正在研究依赖于2的Ionic3应用程序。 因此归入了新的ngModules介绍。 我正在添加个人app.module.ts。 下面html

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在这里作什么?

entryComponents在这里作什么? 组件已经在声明中定义。 那么有什么须要重复呢? 若是我不在这里包含组件,会发生什么?
回答:
Angular使用entryComponents来启用“树震动”,即只编译项目中实际使用的组件,而不是编译全部在ngModule中声明但从未使用的组件bootstrap

这是用ViewContainerRef.createComponent()添加的动态添加的组件。将它们添加到entryComponents告诉脱机模板编译器编译它们并为它们建立工厂。app

路由配置中注册的组件也自动添加到entryComponents,由于router-outlet也使用ViewContainerRef.createComponent()将路由组件添加到DOM。ionic

离线模板编译器(OTC)只生成实际使用的组件。若是组件不直接用于模板,OTC不知道是否须要编译。有了entryComponents,你能够告诉OTC也编译这些组件,以便在运行时可用。code

什么是入口组件? (angular.io)

NgModule文档(angular.io)component

定义这个组件时定义应该被编译的组件。对于此处列出的每一个组件,Angular将建立一个ComponentFactory并将其存储在ComponentFactoryResolver中。
若是你没有给entryComponents列出一个动态添加的组件,你会获得一个错误消息,由于Angular没有建立一个。router

另见https://angular.io/docs/ts/la...htm

你不会比Angular文档获得更好的解释。
如下是角度文档的解释。教程

入口组件是根据类型强制加载的任何组件。
经过它的选择器声明式加载的组件不是一个入口组件。路由

大多数应用程序组件是声明式加载的。 Angular使用组件的选择器来定位模板中的元素。而后建立组件的HTML表示并将其插入选定元素的DOM中。这些不是条目组件。
一些组件只能动态加载,并不会在组件模板中引用

引导的根AppComponent是一个入口组件。确实,它的选择符匹配index.html中的元素标记。可是index.html不是组件模板,AppComponent选择器不匹配任何组件模板中的元素。

动态加载AppComponent,由于它是按照@ NgModule.bootstrap中的类型列出的,或者是经过模块的ngDoBootstrap方法强制性地加载。

路由定义中的组件也是条目组件。路径定义是指按其类型的组件。路由器忽略路由组件的选择器(若是它有一个),并动态地将组件加载到RouterOutlet中。
编译器没法经过在其余组件模板中查找这些条目组件来发现这些条目组件。您必须经过将它们添加到entryComponents列表来告诉它们。

Angular会自动将如下类型的组件添加到模块的entryComponents中:

@ NgModule.bootstrap列表中的组件。
路由器配置中引用的组件。
您没必要明确说起这些组件,虽然这样作是无害的。

传送门:myBlog entryComponents

相关文章
相关标签/搜索