ionic3 懶加載配置 及 NgModule詳解

一)懶加載

Ionic3默認采用懶加載機制正林,什么是懶加載呢?當(dāng)我們第一次進入應(yīng)用充尉,會加載app.module,如果沒有采用懶加載锤悄,那么app.module里的所有東西都會被加載,很顯然這是不太合適的台诗,因為里面的組件和服務(wù)我們在第一次進入應(yīng)用時并沒有全部使用完箩,可能只使用了很少的一部分赐俗,那么對于比較大型的應(yīng)用來說拉队,由于頁面和其他的服務(wù),指令阻逮,管道比較多粱快,就會造成比較用戶體驗不好的影響。
這個時候我們需要把應(yīng)用分為一個個module叔扼,各自引入自己用到的東西事哭,不要管別的模塊。那么第一次進入應(yīng)用瓜富,就只加載很少的app.module和root page對應(yīng)的module鳍咱,當(dāng)我們進入其他頁面的時候,才會去加載相應(yīng)的module与柑。這樣的好處是項目代碼結(jié)構(gòu)清晰谤辜,易于維護,易于開發(fā)价捧,而且第一次加載速度比較快丑念。
當(dāng)我們使用Ionic3的CLI來新建頁面,默認的會是懶加載的結(jié)構(gòu)结蟋,甚至不止頁面脯倚,所有的component,service,directive都默認的是懶加載。

配置ionic3懶加載步驟:

1.給需要懶加載的頁面配置module.ts嵌屎;

例:配置about.module.ts:

1.  import { NgModule } from '@angular/core';  
2.  import { IonicPageModule } from 'ionic-angular';  
3.  import { AboutPage } from './about';  

5.  @NgModule({  
6.  declarations: [  
7.  AboutPage,  
8.  ],  
9.  imports: [  
10.  IonicPageModule.forChild(AboutPage),  
11.  ],  
12.  })  
13.  export class AboutPageModule { }  

2.在對應(yīng)頁面的.ts文件里增加@IonicPage()特性推正;

以about.ts為例,在@Component上方加上@IonicPage()特性(行號4宝惰,注意在上面引用IonicPage(見2行)),其他需要懶加載的頁面同樣操作配置植榕。

1.  import {Component} from '@angular/core';  
2.  import {NavController, IonicPage} from 'ionic-angular';  

4.  @IonicPage()  
5.  @Component({  
6.  selector: 'page-about',  
7.  templateUrl: 'about.html'  
8.  })  
9.  export class AboutPage {  

11.  constructor(public navCtrl: NavController) {  
12.  }  
13.  }

3.在app.module.ts移除頁面引用;

將配置過懶加載的頁面掌测,在app.module.ts中進行移除引用内贮,移除后的代碼如下:

1.  import {HttpModule} from "@angular/http";  
2.  import {AppService} from "./app.service";  
3.  import {NgModule, ErrorHandler} from '@angular/core';  
4.  import {BrowserModule} from '@angular/platform-browser';  
5.  import {IonicApp, IonicModule, IonicErrorHandler} from 'ionic-angular';  
6.  import {MyApp} from './app.component';  
7.  //import {AboutPage} from "../pages/about/about";  

9.  import {StatusBar} from '@ionic-native/status-bar';  
10.  import {SplashScreen} from '@ionic-native/splash-screen';  

12.  @NgModule({  
13.  declarations: [  
14.  MyApp  
15.  //AboutPage  
16.  ],  
17.  imports: [  
18.  BrowserModule,  
19.  HttpModule,  
20.  IonicModule.forRoot(MyApp)  
21.  ],  
22.  bootstrap: [IonicApp],  
23.  entryComponents: [  
24.  MyApp  
25.  //AboutPage  
26.  ],  
27.  providers: [  
28.  StatusBar,  
29.  SplashScreen,  
30.  AppService,  
31.  {provide: ErrorHandler, useClass: IonicErrorHandler}  
32.  ]  
33.  })  
34.  export class AppModule {  
35.  }  

4.使用懶加載产园;

使用懶加載,不需要在頂部進行import導(dǎo)入夜郁,只需要將之前的頁面名字用引號引起來即可:

例:app.component.ts代碼段:

1.  import { Component } from '@angular/core';  
2.  import { Platform } from 'ionic-angular';  
3.  import { StatusBar } from '@ionic-native/status-bar';  
4.  import { SplashScreen } from '@ionic-native/splash-screen';  
5.  //import {TabsPage} from "../pages/tabs/tabs";  

7.  @Component({  
8.  templateUrl: 'app.html'  
9.  })  
10.  export class MyApp {  
11.  //不需要在頂部進行import導(dǎo)入什燕,只需要將之前的頁面名字用引號引起來即可  
12.  //rootPage:any = TabsPage;  
13.  rootPage:any = 'TabsPage';  

15.  constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {  
16.  platform.ready().then(() => {  
17.  statusBar.styleDefault();  
18.  splashScreen.hide();  
19.  });  
20.  }  
21.  }  

配置完成。

NgModule

 NgModule {
     // providers: 這個選項是一個數(shù)組,需要我們列出我們這個模塊的一些需要共用的服務(wù)
     //            然后我們就可以在這個模塊的各個組件中通過依賴注入使用了.
    providers : Provider[]
     // declarations: 數(shù)組類型的選項, 用來聲明屬于這個模塊的指令,管道等等.
     //               然后我們就可以在這個模塊中使用它們了.
    declarations : Array<Type<any>|any[]>
     // imports: 數(shù)組類型的選項,我們的模塊需要依賴的一些其他的模塊,這樣做的目的使我們這個模塊
     //          可以直接使用別的模塊提供的一些指令,組件等等.
    imports : Array<Type<any>|ModuleWithProviders|any[]>
     // exports: 數(shù)組類型的選項,我們這個模塊需要導(dǎo)出的一些組件,指令,模塊等;
     //          如果別的模塊導(dǎo)入了我們這個模塊,
     //          那么別的模塊就可以直接使用我們在這里導(dǎo)出的組件,指令模塊等.
    exports : Array<Type<any>|any[]>
    // entryComponents: 數(shù)組類型的選項,指定一系列的組件,這些組件將會在這個模塊定義的時候進行編譯
    //                  Angular會為每一個組件創(chuàng)建一個ComponentFactory然后把它存儲在ComponentFactoryResolver
    entryComponents : Array<Type<any>|any[]>
    // bootstrap: 數(shù)組類型選項, 指定了這個模塊啟動的時候應(yīng)該啟動的組件.當(dāng)然這些組件會被自動的加入到entryComponents中去
    bootstrap : Array<Type<any>|any[]>
    // schemas: 不屬于Angular的組件或者指令的元素或者屬性都需要在這里進行聲明.
    schemas : Array<SchemaMetadata|any[]>
    // id: 字符串類型的選項,模塊的隱藏ID,它可以是一個名字或者一個路徑;用來在getModuleFactory區(qū)別模塊,如果這個屬性是undefined
    //     那么這個模塊將不會被注冊.
    id : string
 }

https://www.angular.cn/guide/ngmodule-faq

IonicPage

https://ionicframework.com/docs/api/navigation/IonicPage/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末竞端,一起剝皮案震驚了整個濱河市屎即,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌事富,老刑警劉巖技俐,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異统台,居然都是意外死亡雕擂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門贱勃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來井赌,“玉大人,你說我怎么就攤上這事贵扰〕鹚耄” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵戚绕,是天一觀的道長纹坐。 經(jīng)常有香客問我,道長舞丛,這世上最難降的妖魔是什么耘子? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮瓷马,結(jié)果婚禮上拴还,老公的妹妹穿的比我還像新娘。我一直安慰自己欧聘,他們只是感情好片林,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怀骤,像睡著了一般费封。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒋伦,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天弓摘,我揣著相機與錄音,去河邊找鬼痕届。 笑死韧献,一個胖子當(dāng)著我的面吹牛末患,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锤窑,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼璧针,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了渊啰?” 一聲冷哼從身側(cè)響起探橱,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绘证,沒想到半個月后隧膏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嚷那,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年胞枕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片车酣。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡曲稼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出湖员,到底是詐尸還是另有隱情,我是刑警寧澤瑞驱,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布娘摔,位于F島的核電站,受9級特大地震影響唤反,放射性物質(zhì)發(fā)生泄漏凳寺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一彤侍、第九天 我趴在偏房一處隱蔽的房頂上張望肠缨。 院中可真熱鬧,春花似錦盏阶、人聲如沸晒奕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脑慧。三九已至,卻和暖如春砰盐,著一層夾襖步出監(jiān)牢的瞬間闷袒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工岩梳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囊骤,地道東北人晃择。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像也物,于是被迫代替她去往敵國和親藕各。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 路由:根據(jù)不同地址加載不同組件焦除,實現(xiàn)單頁面應(yīng)用 # 1 路由基礎(chǔ)知識 ================= 在ang...
    __凌閱讀 676評論 0 0
  • 1. 更新到ionic3 .1 把node_modules/文件夾中的所有依賴刪掉.2 修改package.jso...
    cpu_driver閱讀 14,012評論 20 24
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理激况,服務(wù)發(fā)現(xiàn),斷路器膘魄,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 回南天的時候乌逐,內(nèi)內(nèi)bra各種不干,那時候我想:我以后一定要嫁給內(nèi)內(nèi)批發(fā)商创葡,在濕冷天氣里取得革命性勝利浙踢;犯鼻炎的時候...
    XukiJhoar閱讀 169評論 0 0
  • You are given am x n2D grid initialized with these three ...
    我是你的果果呀閱讀 265評論 0 0