Ionic 3 另類入門:Page 與Module

寫作文章的當下,已經(jīng)是Ionic 4和5的時代革为,但近期有個Ionic 3的項目需要優(yōu)化导披,而之前對Ionic 和Angular都沒有接觸笋粟,入門過程中遇到一些概念上的疑惑怀挠,這里做些總結(jié)析蝴。

Angular Module

對比過Angular 和Ionic 會發(fā)現(xiàn),兩者的CLI 工具绿淋,在生成代碼方面闷畸,有一點差異:

ng g module shop
ng g c shop/index
ng g c shop/cart
ng g c shop/checkout 
ng g c shop/confirm

通過這組命令,Angular 可以生成一個module吞滞,并在這個module 下生成多個component 并包含進module佑菩。

@NgModule({
 imports: [
  CommonModule
 ],
 declarations: [IndexComponent, CheckoutComponent, CartComponent, ConfirmComponent]
})
export class ShopModule { }

但是在Ionic 中,在生成代碼時裁赠,類型中并沒有module殿漠,但是卻多了一個page 的概念。

ionic generate [<type>] [<name>] [options]
type ..................... The type of generator (e.g. component, directive,
                               page, pipe, provider, tabs)

Ionic Page

在Ionic 中page 有兩層概念佩捞,首先它是一個component绞幌,其次它也可以是一個module。初次接觸可能會有點暈一忱,我們看下例證莲蜘。

第一步

ionic generate page cart --no-module

先不去管尾部參數(shù)的含義,這行命令帘营,創(chuàng)建了一個component:CartPage

@Component({
  selector: 'page-cart',
  templateUrl: 'cart-page.html',
})
export class CartPage {

  constructor(public navCtrl: NavController, public navParams: NavParams) {
  }
}

這里體現(xiàn)了page的第一層概念票渠,它是一個component。

第二步

ionic generate page shop

這行命令芬迄,創(chuàng)建了一個component:ShopPage问顷,以及聚合了這個component 的module。

// shop.ts
@IonicPage
@Component({
  selector: 'page-shop',
  templateUrl: 'shop-page.html',
})
export class ShopPage {

  constructor(public navCtrl: NavController, public navParams: NavParams) {
  }
}
// shop.module.ts
@NgModule({
  declarations: [
    ShopPage
  ],
  imports: [
    IonicPageModule.forChild(ShopPage),
  ]
})
export class ShopPage {}

這里體現(xiàn)了page的第二層概念禀梳。

注意這里择诈,在component 定義的上方,多了一個@IonicPage的注解出皇。Ionic 框架會對它有特殊的處理羞芍,已知的部分是,如果component 上有這個注解郊艘,但Ionic 運行時如果沒有找到相同名稱的module荷科,會報錯。
這里是個人覺得Ionic 設計原語中不大一致的地方纱注,通過ionic g page --no-module 創(chuàng)建的page 卻不是 IonicPage畏浆,直觀的體現(xiàn)是,生成的component 上方?jīng)]有這個注解 ??狞贱。(僅僅站在框架使用者的角度)

Ionic 中如何把多個頁面“聚合”在一個module 中

在開始的例子中刻获,Angular CLI 生成的一組文件,實現(xiàn)了一個效果瞎嬉,在shop 這個module 中蝎毡,包含了index, cart, checkout, confirm 四個頁面厚柳。
module 是Angular 運行時,控制資源(js)加載的單位沐兵,我們可以整體控制一個module 是預加載還是懶加載别垮,從而實現(xiàn)不同場景下的優(yōu)化策略。

Ionic 運行時扎谎,對module 默認是懶加載的碳想。

如果我們需要在Ionic 中,對shop 的四個頁面毁靶,實現(xiàn)整體預加載胧奔,那么首先要把這些頁面聚合到一個module 中,該怎么做呢预吆?

Ionic module 預加載的設置葡盗,不在此文講述。

Ionic CLI 在生成代碼時啡浊,并沒有像Angular CLI 那樣觅够,對這個需求提供直接支持。因為如前文提到巷嚣,在CLI 提供的語義中喘先,沒有module 這個概念。
但實際生成的代碼中module 是存在的廷粒,所以我們可以自己動手窘拯。

第一步

ionic generate page cart --no-module
ionic generate page checkout --no-module
ionic generate page confirm --no-module

第二步

修改shop module 定義

// shop.module.ts
@NgModule({
  declarations: [
    ShopPage,
    CartPage,
    CheckoutPage,
    ConfirmPage
  ],
  imports: [
    IonicPageModule.forChild(ShopPage),
  ],
  entryComponents: [
    CartPage,
    CheckoutPage,
    ConfirmPage
  ]
})

回顧

通過對page 和module 的概念區(qū)分,以及對比Angular 和 Ionic CLI 在生成代碼環(huán)節(jié)的差異坝茎,我們可以了解到涤姊,如何在Ionic 中,如何手動組織module嗤放,來靈活的滿足運行時靈活的資源加載需求思喊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市次酌,隨后出現(xiàn)的幾起案子恨课,更是在濱河造成了極大的恐慌,老刑警劉巖岳服,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剂公,死亡現(xiàn)場離奇詭異,居然都是意外死亡吊宋,警方通過查閱死者的電腦和手機纲辽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拖吼,你說我怎么就攤上這事鳞上。” “怎么了绿贞?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵因块,是天一觀的道長橘原。 經(jīng)常有香客問我籍铁,道長,這世上最難降的妖魔是什么趾断? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任拒名,我火速辦了婚禮,結(jié)果婚禮上芋酌,老公的妹妹穿的比我還像新娘增显。我一直安慰自己,他們只是感情好脐帝,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布同云。 她就那樣靜靜地躺著,像睡著了一般堵腹。 火紅的嫁衣襯著肌膚如雪炸站。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天疚顷,我揣著相機與錄音旱易,去河邊找鬼。 笑死腿堤,一個胖子當著我的面吹牛阀坏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笆檀,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼忌堂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酗洒?” 一聲冷哼從身側(cè)響起浸船,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寝蹈,沒想到半個月后李命,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡箫老,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年封字,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡阔籽,死狀恐怖流妻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笆制,我是刑警寧澤绅这,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站在辆,受9級特大地震影響证薇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匆篓,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一浑度、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸦概,春花似錦箩张、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咨察,卻和暖如春论熙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扎拣。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工赴肚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人二蓝。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓誉券,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刊愚。 傳聞我的和親對象是個殘疾皇子踊跟,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348