Ionic2系列——使用DeepLinker實現指定頁面URL

来源:http://www.cnblogs.com/yanxiaodi/archive/2016/11/21/6086007.html
-Advertisement-
Play Games

Ionic2使用了近似原生App的頁面導航方式,並不支持Angular2的路由。這種方式在開發本地App的時候比較方便,但如果要用來開發純Web頁面就有點問題了,這種情況下Angular2的router可以提供更靈活的配置。比如在首頁是一個Tabs頁面的情況下,如何控制用戶看到的第一項Tab?預設情 ...


Ionic2使用了近似原生App的頁面導航方式,並不支持Angular2的路由。這種方式在開發本地App的時候比較方便,但如果要用來開發純Web頁面就有點問題了,這種情況下Angular2的router可以提供更靈活的配置。比如在首頁是一個Tabs頁面的情況下,如何控制用戶看到的第一項Tab?預設情況下都是會導航到第一個Tab,而且地址欄的URL並不會跟隨頁面的切換而變化。好在Ionic2提供了一種類似路由的DeepLinker功能,可以實現以上目的。

 

DeepLinker與NavController一起工作,但是用戶基本不會直接與這個東西打交道。只有用戶需要對URL進行處理的時候才需要配置這個。使用DeepLinker後,如果NavController push了一個新的頁面,DeepLinker會在配置中尋找匹配的URL設置並更新URL。

 

我們的需求場景是這樣的,在微信公眾號的菜單欄有n個菜單,點擊不同的菜單,需要直接導航到我們頁面對應的Tab上,而不是讓用戶再去選擇Tab。下麵說一下具體做法。

 

首先新建一個Ionic2項目。目前最新的CLI已經升級到了2.1.12,ionic-angular升級到了RC3,強烈建議更新。使用以下命令來創建一個Tabs模板的項目:

 

ionic start TabsDemo tabs --v2

預設會建立有三個Tab頁的項目。主要有4個頁面,一個Tabs是主頁面,其他三個Tab頁分別是home,about,contact。

 

基本用法

DeepLinker是在IonicModule.forRoot方法中使用,作為第三個參數:

imports: [
   IonicModule.forRoot(MyApp, {}, {
     links: []
  })
 ]

數組裡的對象是DeepLinkerConfig,配置了URL和頁面的匹配關係,一般來說是這樣子的:

imports: [
   IonicModule.forRoot(MyApp, {}, {
     links: [
      { component: HomePage, name: 'Home', segment: 'home' }
    ]
  })
 ]

也就是說,當瀏覽HomePage這個頁面的時候,URL會變成http://examplesite/#/home/home

傳參

有的時候也需要從URL傳遞參數,可以用下麵的形式:

links: [
  { component: HomePage, name: 'Home', segment: 'home' }
  { component: DetailPage, name: 'Detail', segment: 'detail/:user' }
]

這樣在DetailPage的ts文件中就可以接收user這個參數,進行處理。需要註意的是,這個參數應該是可以被DeepLinker序列化的,因此建議設置為一個string或number。

實現跳轉到指定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] }
]

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SASS是什麼 傳統的CSS是一種單純的描述性樣式文件,然而SASS可以對CSS進行預編譯處理。 在SASS源碼中可以使用變數、函數、繼承等動態語言的特性,並且可以編譯成CSS文件。 安裝與使用 安裝 由於sass是ruby寫的,所以想要使用sass就需要安裝ruby環境。然後再使用gem安裝sas ...
  • 好久沒寫博客了,不想廢話,直接欣賞效果! 點擊這裡,查看完美效果! 附完整代碼: <!doctype html> <html> <head> <meta charset="utf-8"> <title>heart nick</title> <style> canvas { position: abs ...
  • 在CSS中,a標簽有4種偽類,分別為: 對其稍有瞭解的前端er都知道,4個偽類是有固定順序的(LVHA),否則很容易出現預期之外的效果。 大部分人,都會用自己的方式,對這個順序死記硬背。 熟記順序,無疑是寫樣式時最快捷的方法,牛人們的記憶方法也是五花八門。 我見過有醬嬸的:lv的包包hao,這倒是實 ...
  • 如何在Node.js中encode一個字元串呢?是否也像在PHP中使用base64_encode()一樣簡單? 在Node.js中有許多encoding字元串的方法,而不用像在JavaScript中那樣定義各種不同的全局函數。下麵是如何在Node.js中將一個普通字元串encode成Base64格式 ...
  • 下載地址http://download.csdn.net/detail/shouce_ren/9689243 百度雲下載地址 ...
  • Angularjs內置的過濾器(filter)為我們的數據信息格式化提供了比較強大的功能,比如:格式化時間,日期、格式化數字精度、語言本地化、格式化貨幣等等。但這些過濾器一般都是在VIEW中使用的,比如格式化時間/日期的VIEW視圖代碼: 那麼問題來了,如果我需要在控制器(controller)的j ...
  • 一、三個對話框 1、alert("提示信息") 彈出只帶有一個確定按鈕的對話框2、confirm("提示信息") 彈出有確定和取消按鈕的對話框3、prompt("提示信息",預設值) 可輸入內容的對話框,返回null 二、數據類型 1、var通用類型2、數據類型轉換(1)將變數轉為整數類型parse ...
  • 工廠模式:無法識別對象 function createObject(name, age) { //集中實例化的函數 var obj = new Object(); obj.name = name; obj.age = age; obj.run = function () { return this. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...