當我導航view之后,再使用$location.path("/path/origin")方法重新定位到初始頁面,在深入進入其他的view之后使用這個方法就遇到了問題。
假設這個設置頁面為viewA,如果只從viewA-》viewB,那么使用$location.path(’viewA‘)方法重新定位回viewA就沒問什么問題。但是如果從viewA-》viewB-》viewC,在viewC重新返回到viewA $location.path(‘viewA‘),viewA左上角的圖標就不在是其本來的功能按鈕,變成了如下第二圖的左箭頭。
造成這問題是因為web瀏覽器只跟蹤一個歷史瀏覽記錄,而app和webapp需要並行獨立的歷史記錄,例如上面說的viewB和viewC,我們需要這兩個視圖前一個視圖記錄都是viewA。
第一種方法:讓viewC忘記它自己的蹤跡,在viewC的controller中加入下面代碼
$ionicHistory.nextViewOptions({ disableBack: true });
這時候從需要從viewC返回到viewA就可以使用$location.path("viewA"),左上角不再是左箭頭。並且打印出$ionicHistory.viewHistory()可以看見,此時viewA和開始的時候viewA的backview一樣都為null
如果不加上面那段代碼打印結果是這樣的:
方法二:從viewC直接返回到viewA
ionic官方文檔中有介紹goBack方法,如下:
所以,我們就可以在viewC中直接使用這個goBack方法,在瀏覽器的歷史記錄棧中,直接返回到viewA:
$ionicHistory.goBack(-2);
打印出viewA的視圖歷史和上面一樣,backView: null
由以上方法總結出:如果viewA的backView有值,那么ionic就會自動將左上角設置為返回按鈕。換言之,人為的控制backView那么就可以得到我們想要的結果