ionic3 開發(fā)之工作原理(目錄結(jié)構(gòu)饭宾、文件分析)及懶加載介紹

onic3.x 目錄結(jié)構(gòu)分析

執(zhí)行命令ionic start myApp tabs 生成ionic3項目myApp后,用vsCode打開項目可以看到項目中:

  • node_modules //node 各類依賴包
  • resources //android/ios 資源(更換圖標(biāo)和啟動動畫)
  • src //開發(fā)工作目錄惭适,頁面科阎、樣式辆苔、腳本和圖片都放在這個目錄下
  • www //靜態(tài)文件
  • platforms //生成 android 或者 ios 安裝包路徑( platforms\android\build\outputs\apk:apk 所在位置)
  • plugins // 已安裝的cordova插件(通過ionic cordova plugins ls查看算灸,通過ionic cordova plugins add/remove 插件名或路徑來添加/刪除)
  • config.xml //打包成 app 的配置文件,也就是原生項目配置文件
  • package.json //node安裝模塊時的依據(jù)文件,配置項目的元數(shù)據(jù)和管理項目所需要的依賴驻啤, 在里面配置的內(nèi)容菲驴,在執(zhí)行npm install命令后會生成到node_modules目錄。
  • tsconfig.json //TypeScript 項目的根目錄骑冗,指定用來編譯這個項目的根文件和編譯選項
  • tslint.json //格式化和校驗 typescript

src目錄詳細介紹

src目錄:工作目錄,開發(fā)完成后通過ionic的命令行生成為原始的靜態(tài)html頁面赊瞬,并存放在www目錄,也就是說www在開發(fā)過程中是不需要理的贼涩,可以任意刪除森逮。

當(dāng)我們想打包app時,命令行執(zhí)行打包指令會生成一個調(diào)用瀏覽器插件的原生項目磁携,同時把www目錄拷貝到項目中,瀏覽器插件的入口網(wǎng)頁指向www的index.html良风,從而在app中實現(xiàn)本地瀏覽網(wǎng)頁的效果谊迄。

其中頁面和腳本等因為是本地的就不需要網(wǎng)上加載,在數(shù)據(jù)加載過程中就已經(jīng)可以看到頁面烟央,等數(shù)據(jù)加載完成自動局部刷新頁面即可统诺,這就是ionic的運行機理

src 下面文件分析:

  • app:入口文件夾

    -app.component.ts:入口頁的業(yè)務(wù)邏輯(根組件);

    -app.html:入口頁的html模板疑俭;

    -app.module.ts:入口模塊配置, 告訴Angular如何編譯和啟動應(yīng)用程序粮呢;

    -app.scss:入口頁的樣式(全局樣式);

    -main.ts:啟動模塊入口钞艇;

  • assets:樣式啄寡、圖片、字體哩照、腳本等靜態(tài)文件挺物;
    pages:開發(fā)頁面,含html飘弧、ts识藤、css;
    theme:主題文件夾次伶,里面可以放置多個主題文件痴昧,方便切換主題;

  • components:自定義組件(公用冠王、可復(fù)用模塊)赶撰;
    directives:自定義指令(注入到組件上為組件添加功能);
    pipes:自定義管道(用于格式化顯示數(shù)據(jù));
    providers:自定義服務(wù)(工具類扣囊、業(yè)務(wù)處理類等等)乎折;

了解IonicModule之前,我們需要先看下NgModule與@NgModule 裝飾器:

NgModule是angular(這里不再詳細介紹)框架的概念侵歇。

  • 一個NgModule描述如何將應(yīng)用程序各部分組合在一起骂澄。每個應(yīng)用程序都至少有一個Angular module,即啟動應(yīng)用程序時引導(dǎo)的根模塊惕虑。

  • @NgModule decorator將AppModule標(biāo)識為NgModule類坟冲。@NgModule接受一個元數(shù)據(jù)對象,該對象告訴Angular如何編譯和啟動應(yīng)用程序溃蔫。

  • NgModule 的元數(shù)據(jù)會做這些:
    * 聲明某些組件健提、指令和管道屬于這個模塊。
    * 公開其中的部分組件伟叛、指令和管道私痹,以便其它模塊中的組件模板中可以使用它們。
    * 導(dǎo)入其它帶有組件统刮、指令和管道的模塊紊遵,這些模塊中的元件都是本模塊所需的。
    * 提供一些供應(yīng)用中的其它組件使用的服務(wù)侥蒙。

@NgModule 裝飾器:

  • @NgModule 裝飾器表明 AppModule 是一個 NgModule 類暗膜。 @NgModule 獲取一個元數(shù)據(jù)對象,它會告訴 Angular 如何編譯和啟動本應(yīng)用鞭衩。元數(shù)據(jù)對象關(guān)鍵字段:

    *declarations —— 聲明屬于這個模塊的組件学搜,指令,管道等等. 聲明后就可以在這個模塊中使用它們了.
    *imports —— 導(dǎo)入需要依賴的一些其他的模塊,比如 BrowserModule 以獲取瀏覽器特有的服務(wù)论衍,比如 DOM 渲染瑞佩、無害化處理和位置(location)。
    *providers —— 各種共用的服務(wù)坯台。
    *bootstrap —— 指定了這個模塊啟動的時候應(yīng)該啟動的組件.當(dāng)然這些組件會被自動的加入到entryComponents中去钉凌,Angular 創(chuàng)建它并插入 index.html 宿主頁面。

IonicModule與IonicPageModule

了解了NgModule以后捂人,IonicModule與IonicPageModule就好解釋了御雕。

  • IonicModule是一個引導(dǎo)Ionic應(yīng)用程序的NgModule。

  • IonicPageModule是一個NgModule滥搭,它引導(dǎo)子IonicPage以設(shè)置路由酸纲。

回頭我們再好好看下@NgModule中的這些屬性:

declarations

  • 模塊的聲明數(shù)組告訴Angular哪些組件屬于該模塊。
  • 當(dāng)創(chuàng)建更多的組件時瑟匆,將它們添加到聲明中闽坡。如果您使用組件而不聲明它,則角返回一條錯誤消息。
  • 聲明數(shù)組只接受可聲明的內(nèi)容:組件疾嗅、指令(directive)和管道(pipe)外厂。
  • 聲明必須只屬于一個模塊。如果試圖在多個模塊中聲明同一個類代承,則編譯器會發(fā)出錯誤汁蝶。
  • 這些已聲明的類在模塊中是可見的,但在不同模塊中的組件是不可見的论悴,除非它們是從這個模塊導(dǎo)出掖棉,而另一個模塊導(dǎo)入這個模塊。

entryComponents(入口組件):

  • 這些組件將會在這個模塊定義的時候進行編譯 膀估, Angular會為每一個組件創(chuàng)建一個ComponentFactory然后把它存儲在ComponentFactoryResolver
  • There are two main kinds of entry components:
  • The bootstrapped root component.
  • A component you specify in a route definition.
  • Angular 必須加載的組件是入口組件
  • 引導(dǎo)組件是在引導(dǎo)過程(應(yīng)用程序啟動)中加載到DOM的入口組件幔亥。其他入口組件通過其他方式動態(tài)加載,例如使用路由器察纯。
  • 大多數(shù)應(yīng)用開發(fā)者都不需要把組件添加到 entryComponents 中帕棉。
  • Angular 會自動把恰當(dāng)?shù)慕M件添加到入口組件中。 列在 @NgModule.bootstrap 中的組件會自動加入饼记。 由路由配置引用到的組件會被自動加入香伴。 用這兩種機制添加的組件在入口組件中占了絕大多數(shù)。

bootstrap:

  • the root component that Angular creates and inserts into the index.html host web page.
  • @NgModule.bootstrap 屬性告訴編譯器這是一個入口組件握恳,同時它應(yīng)該生成一些代碼來用該組件引導(dǎo)此應(yīng)用。

ionic關(guān)鍵之頁面:IonicPage

  • Ionic 頁面基于url注冊和顯示頁面詳情捺僻,當(dāng)頁面被NavController推出來的時候乡洼,URL將被更新,以匹配到此頁面的路徑匕坯。
  • 與傳統(tǒng)的web應(yīng)用程序不同束昵,url在Ionic應(yīng)用程序中不指定導(dǎo)航。相反葛峻,url幫助我們鏈接到特定的內(nèi)容片段锹雏。當(dāng)我們導(dǎo)航時,會更新當(dāng)前URL术奖。
  • 我們將我們的URL系統(tǒng)稱為深層鏈接系統(tǒng)礁遵,而不是路由器,以鼓勵I(lǐng)onic開發(fā)人員將URL視為面包屑(內(nèi)容片段)采记,而不是真正的導(dǎo)航佣耐。

ionic3.x懶加載實現(xiàn):

官方介紹在這里
懶加載是ionic3.x的新特性,Lazy Loading 可以在初始化時只加載一些必要的代碼唧龄,非必要的代碼分離出來在需要加載的時候再加載之兼砖,理論上能讓應(yīng)用加快一定的啟動速度。

下面以MyPage的加載為例,懶加載的實現(xiàn):
第一步:設(shè)置深度鏈接: IonicPageModule中添加此頁面讽挟,IonicPageModule.forChild用于導(dǎo)入頁面模塊
@NgModule({
  declarations: [ MyPage ],
  imports: [
  IonicPageModule.forChild(MyPage)
 ],
   entryComponents: [
   MyPage
]
 })
export class MyPageModule {}
第二步:將@IonicPage decorator添加到組件中懒叛。最簡單的用法是添加一個空的decorator:
@IonicPage()
@Component({
   templateUrl: 'main.html'
})
export class MyPage {}

這將自動創(chuàng)建一個鏈接到MyPage組件,使用與類名稱相同的名稱:“MyPage”耽梅。@IonicPage() 等同于:@IonicPage({‘MyPage’})
@IonicPage decorator接受了一個DeepLinkMetadataType對象薛窥。此對象接受以下屬性:name, segment, defaultHistory, and priority.。所有這些都是可選的褐墅,但是可以用來創(chuàng)建復(fù)雜的導(dǎo)航鏈接拆檬。

第三步:使用這個名稱導(dǎo)航到該頁面了。例如:
@Component({
   templateUrl: 'another-page.html’
 })
export class c {
   constructor(public navCtrl: NavController) {}
    goToMyPage() {
         // go to the MyPage component
        this.navCtrl.push('MyPage');
     }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妥凳,一起剝皮案震驚了整個濱河市竟贯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逝钥,老刑警劉巖屑那,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異艘款,居然都是意外死亡持际,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門哗咆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜘欲,“玉大人,你說我怎么就攤上這事晌柬±逊荩” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵年碘,是天一觀的道長澈歉。 經(jīng)常有香客問我,道長屿衅,這世上最難降的妖魔是什么埃难? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮涤久,結(jié)果婚禮上涡尘,老公的妹妹穿的比我還像新娘。我一直安慰自己响迂,他們只是感情好悟衩,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著栓拜,像睡著了一般座泳。 火紅的嫁衣襯著肌膚如雪惠昔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天挑势,我揣著相機與錄音镇防,去河邊找鬼。 笑死潮饱,一個胖子當(dāng)著我的面吹牛来氧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播香拉,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼啦扬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凫碌?” 一聲冷哼從身側(cè)響起扑毡,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盛险,沒想到半個月后瞄摊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡苦掘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年换帜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹤啡。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡惯驼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出递瑰,到底是詐尸還是另有隱情祟牲,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布泣矛,位于F島的核電站疲眷,受9級特大地震影響禾蚕,放射性物質(zhì)發(fā)生泄漏您朽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一换淆、第九天 我趴在偏房一處隱蔽的房頂上張望哗总。 院中可真熱鬧,春花似錦倍试、人聲如沸讯屈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涮母。三九已至谆趾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叛本,已是汗流浹背沪蓬。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留来候,地道東北人跷叉。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像营搅,于是被迫代替她去往敵國和親云挟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351

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

  • 1转质、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,969評論 3 119
  • 1 Webpack 1.1 概念簡介 1.1.1 WebPack是什么 1园欣、一個打包工具 2、一個模塊加載工具 3...
    Kevin_Junbaozi閱讀 6,647評論 0 16
  • 很久沒有寫文章了峭拘,一方面生活瑣事沒調(diào)整過來俊庇,另一方面最近忙了一個比較繁瑣的項目。在這個項目里使用了ueditor鸡挠,...
    小前seant閱讀 1,321評論 0 0
  • 2018.4.8周末辉饱,晴三年級十二班李淑穎麻麻 清明假期結(jié)束開學(xué)的第一天,由于三天的清明假又養(yǎng)成了晚睡晚起的習(xí)慣拣展,...
    lsy穎閱讀 202評論 0 1
  • 城鄉(xiāng)之壤 不記得什么時候彭沼,剎那間熟悉的眼神定格的畫面,那是屬于鄉(xiāng)村的無知與期待备埃,那只屬于鄉(xiāng)里的靈動與實誠姓惑,好久不見...
    沉淀123閱讀 183評論 0 0