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
在這裏作什麼? 組件已經在聲明中定義。 那麼有什麼須要重複呢? 若是我不在這裏包含組件,會發生什麼?
回答:
Angular使用entryComponents來啓用「樹震動」,即只編譯項目中實際使用的組件,而不是編譯全部在ngModule中聲明但從未使用的組件bootstrap
這是用ViewContainerRef.createComponent()添加的動態添加的組件。將它們添加到entryComponents告訴脫機模板編譯器編譯它們併爲它們建立工廠。app
路由配置中註冊的組件也自動添加到entryComponents,由於router-outlet也使用ViewContainerRef.createComponent()將路由組件添加到DOM。ionic
離線模板編譯器(OTC)只生成實際使用的組件。若是組件不直接用於模板,OTC不知道是否須要編譯。有了entryComponents,你能夠告訴OTC也編譯這些組件,以便在運行時可用。code
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