ionic3懶加載和DeepLinker

ionic3默認使用NavController實現頁面跳轉切換,且url不變。有時候我們需要直接用網址打開一個頁面。
那么可以有兩種方式,DeepLinker和懶加載。
Angular中懶加載的配置,需要在Routes中配置好loadchildern的對應的模塊的相對路徑,然后在子模塊的路由中配置子模塊中的路由映射。好處是模塊化設計,模塊的加載和卸載比較方便。

1、懶加載

ionic3中的懶加載是直接對Page進行設置,只需要簡單3不就能完成,操作更加簡單。

注意:這里之前被cnpm i坑到懷疑人生。node_module務必要使用npm i來進行安裝。之前使用cnpm安裝了依賴后,下面代碼死活運行不成功。報錯找不到模塊。


image.png

第一步:page1.ts中添加ionicpage裝飾器

//@IonicPage()//默認name:"Page1Page",segment:"page1"
@IonicPage({
  name: "mypage1",
  segment: 'detail/:id'
})

第二步:page1.module.ts中添加entryComponents的配置

import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { Page1Page } from './page1';

@NgModule({
  declarations: [
    Page1Page,
  ],
  imports: [
    IonicPageModule.forChild(Page1Page),
  ],
  entryComponents: [
    Page1Page
  ]
})
export class Page1PageModule { }

第三步:調用

  GO() {
    this.navCtrl.push("mypage1", { id: 100 });
  }

那么在前臺點擊按鈕,調用GO方法的時候,就會打開http://localhost:8100/#/detail/100。直接打開這個網址,也會打開這個頁面。這樣就實現了懶加載。
官方教程:https://ionicframework.com/docs/api/navigation/IonicPage/

2、DeepLink

使用DeepLink會比較麻煩,每次需要給頁面配置網址,需要在app.module.ts中添加一條記錄。
實現跳轉到指定Tab
修改app.module.ts文件,將IonicModule.forRoot方法改為如下代碼:

IonicModule.forRoot(MyApp, {}, {
      links: [
         { component: TabsPage, name: 'Tabs', segment: 'tabs/:tabId' }
      ]
    })

這里的意思是,給Tabs頁傳一個參數,如http://examplesite/#/tabs/1,這樣就讓App直接跳到第二個Tab。
修改tabs.ts文件,改為如下代碼:

export class TabsPage {
  // this tells the tabs component which Pages
  // should be each tab's root Page
  tab1Root: any = HomePage;
  tab2Root: any = AboutPage;
  tab3Root: any = ContactPage;
  public tabId: number;
  public selectTabIndex: number;
  constructor(public params: NavParams) {
    
    this.tabId = params.get("tabId");
    if(this.tabId != undefined || this.tabId !=null)
    {
      this.selectTabIndex = this.tabId;
    }
    
  }
}

添加了兩個變量,然后通過NavParams取得傳遞過來的參數并賦值給selectTabIndex。
修改tabs.html,給Tabs組件添加一個綁定:

<ion-tabs selectedIndex={{selectTabIndex}}>

運行ionic serve命令,會自動打開http://localhost:8100/地址,現在打開一個新窗口,輸入http://localhost:8100/#/tabs/1,OK,直接跳到第二個Tab了。

默認歷史

還有一種情況,如果從其他頁面直接導航到內部的頁面,當點擊返回的時候,該返回哪個頁面呢?比如從推送通知進到新聞詳情頁面,當點擊返回的時候,應該返回首頁。所以Ionic2提供了defaultHistory參數,如果頁面歷史堆棧中不存在歷史頁面的時候,就會返回到這個頁面。用法如下:

links: [
  { component: HomePage, name: 'Home', segment: 'home' }
  { component: DetailPage, name: 'Detail', segment: 'detail/:user', defaultHistory: [HomePage] }
]
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容