2015-05-03 54 views
2

我與AngularJS一起使用離子(stateProvider)離子NAV-後退按鈕和state.go - 回行動工作ambigously

我在默認模板中添加以下代碼爲抽象狀態

<ion-nav-bar class="bar-stable"> 
<ion-nav-back-button> 
</ion-nav-back-button> 
</ion-nav-bar> 

當默認的控制器被加載(顯示狀態σ),它通過調用

$state.go(...); 

這導致加載另一個模板轉換到另一種狀態(StateB),它被顯示在子視圖。此外,它還激活後退按鈕。

  1. 點擊導航欄中的後退按鈕後,它將回到默認頁面(StateA)。
  2. 導航欄中的後退按鈕變得不可見,但是如果我在移動設備上按回按鈕,它會將我帶回轉換狀態(StateB)。

這有點奇怪,爲什麼StateB再次顯示而不是應用程序關閉。

+0

您是否找到解決方案? –

回答

1

當用戶在整個應用中導航時,Ionic能夠跟蹤他們的導航歷史記錄。通過了解他們的歷史,視圖之間的轉換可以使用平臺的轉換風格正確地進入和退出。

Ionic Doc

離子會自動追蹤您的狀態歷史的你使用stateProvider的,所以它就像歷史的堆棧。

你從狀態A開始,堆棧只有一個頁面:A.

| A | 

之後,你去到狀態B,這將是推入歷史堆棧:

| B | 
| A | 

Ionic提供的導航視圖會在導航欄中顯示一個後退按鈕,因爲它認爲您正在進行狀態轉換並幫助您保留歷史記錄(如iOS中的導航控制器)。

然後,如果您單擊導航欄中的後退按鈕,歷史堆棧會彈出B,然後再次顯示A.

| A | 

因爲您回到初始狀態(如根頁面),後退按鈕將被刪除。

爲什麼在手機上點擊返回按鈕,它將我帶回 轉換狀態?

您正在操縱全局窗口對象的窗口歷史(Compiled Ionic App仍然考慮一個Web應用程序,即使在我認爲的移動平臺中)。這與您在瀏覽器中點擊後退按鈕時的操作非常相似。

/A <- /B(window history) <- /A (current page) 
  1. 如果你想要做ionicHistory東西,檢查this discussion

  2. 如果你想與你的設備按鈕的行爲的東西,檢查this related topics

我也是在這裏學習離子,所以我不確定我是否正確地理解了所有的概念。希望這可以幫助!

+1

我非常理解歷史是如何工作的,問題是一旦在導航欄上單擊「後退」按鈕,狀態B應該從歷史記錄中刪除,並且現在在狀態A時按下「返回」設備,不應該導致顯示stateB。但不幸的是狀態B正在顯示。 – CuriousMind

+0

@CuriousMind我認爲設備上的「返回」按鈕將使用window.history.back()返回上一頁。 window.history與$ ionicHistory不同,我不確定是否可以修改它。也許你想改變你的「後退」按鈕的行爲,以達到你想要的。 – Gisonrg

+0

@CuriousMind我同意應該是這樣。設備後退按鈕和Ionic後退按鈕應該做類似的事情。我認爲從這個角度來看,Ionic的後臺處理是非常麻煩的。 –