ionic3很好很強大,有人噴有人贊。不想參與其中,個人認為如果能很好的滿足需求,好壞都是無所謂的,最合適的才是最好的。總結下最近使用ionic3的一些知識點,方便以后查詢。多句嘴:會ionic3和只會ionic3是兩個境界。
今天有妹子鎮樓。今天的是……

頁面想要“跳來跳去”的需要借助“工具”才能實現,就好像我們要攀岩需要有繩子一樣,當前的“繩子”就是我們出場率很高的導航控制器NavController
,首先需要在在頁面頂端引入
import { NavController } from ‘ionic-angular’
項目中的實際應用情況見下圖:

只是引用組件的話,我們的導航控制器還不能使用,必須在構造器中初始化組件才能進行下一步。
//構造器中初始化組件 constructor(public navCtrl: NavController) { //do some thing // or // don`t }

然后我們就可以用navCtrl
的的push
方法來跳轉想要的組件頁面。根據typescript
的尿性,一般情況下我們需要這樣使用:
this.navCtrl.push(XXXPage,{data});

很簡單不是么?不過這只是開始,世界上唯一不變的就是變化,具體使用情境的邏輯或是客戶的異想天開,總會給我們帶來各種各樣的奇葩體驗。后面就是進階裝B階段,都閃開!

假設一種情景,我們的頁面已經進入的足夠深,例如:
列表A --> 列表A2 --> 列表A23--> 列表A235 --> .... --> 內容
ionic3的默認方法只是返回上一級,如果我們想從內容
返回至列表A
,必須很麻煩的從內容
逐級點返回按鈕來返回上一級直至列表A
,有多少層就要點擊多少次,要是路徑足夠深估計會點到內傷吐血,這樣的設計會大幅度降低用戶體驗。有沒有什么方法可以從內容
直接返回至列表A
呢?
回答是肯定的,萬物皆有道。萬物皆有法。道法文檔,才能一切皆有可能。方法popToRoot
就是這樣一個方便的神器,它可以直接讓我們返回至導航的根位置,而不管它距離根有多遠。關於這貨的使用方法我摘抄自ionic3官方文檔NavController部分。
popToRoot(opts)
Navigate back to the root of the stack, no matter how far back that is. <<注意這句話
Param Type Details opts object
Nav options to go with this transition. Returns a promise which is resolved when the transition has completed.
opts
決定了在跳轉時候的過渡效果,在完成功能最高權重思想的指引下下,這個參數我們可以無視。popToRoot
方法在具體項目中的運用:

哈哈!這下我們再也不怕“深”了。有此利器,再深我們也能自信滿滿的進去闖一闖。(氣氛怎么有點怪怪的?)

完了么?沒有!!具體使用情境是千變萬化的,從來沒有固定套路。popToRoot
很強大,但是有一種情況絕對會讓它無能為力。

例如,我們有三個tabs,在tabs3下面的的深層路徑組件使用popToRoot
只能讓我們直接返回到tabs3的頁面。就像下圖所示。

這樣的原因是因為我們在tab.html中已經設置了每個root。所以我們的popToRoot
只能讓我們返回至各自的root.

我們會經常遇見這種情況,就是我們需要從tabs3下面的深層次組件需要跳轉到tabs1的根。這個需求是popToRoot
無法滿足的。
例如在項目中我的tabs3是設置選項,如果不是登錄狀態的話有些設置是不能操作的,這個時候需要提示用戶登錄,在提示界面如果用戶不點擊登錄而是點擊返回。在返回事件中使用popToRoot
只會讓我們返回tabs3頁面,這恰恰不是我們需要的,我們需要的是用戶直接返回至tabs1的首頁。看來還要想另外的辦法。

萬事不決找文檔。其實目前問題已經轉向了,並不是導航NavController
的功能范疇了,tabs的加入讓問題開始變的撲朔迷離,看來我們需要從tabs相關文檔開始查閱。
功夫不負有心人,在ionic3官方文檔tabs部分中我們找到了一下的這句話:
You can also switch tabs from a child component by calling
select()
on the parent view using theNavController
instance. For example, assuming you have aTabsPage
component, you could call the following from any of the child components to switch toTabsRoot3
:
switchTabs() { this.navCtrl.parent.select(2); }
select
方法的參數是tabs的index值,從零開始計算。
這個方法可以讓我們從一個組件中直接跳轉到不同的tabs根位置。例如我的項目中是這樣用的:

剛接觸ionic肯定會有錯誤,歡迎指正,不歡迎吐槽~
