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] }
]