[angularjs] 離子歷史如何工作以及何時創建非根堆棧?


Answers

作為上一篇文章的附加信息。

歷史堆棧始終鏈接到“離子導航視圖”模板。 因此,為第一個“離子導航視圖”項創建根歷史堆棧。

如果您計劃使用不同的歷史堆棧,我建議始終將ion-nav-view鏈接到視圖名稱: <ion-nav-view name="default"></ion-nav-view>而不是<ion-nav-view></ion-nav-view>

在此CodePen您有一個RootStack用於選項卡頁面和其他頁面(名為“tabs”,“other”,“other1”),然後在選項卡頁面中為每個選項卡提供一個子包。 標籤頁和其他頁面在Root ion-nav-view中運行。 在測試期間,我需要為root ion-nav-view指定一個名稱,然後在控制器中引用該視圖名稱。 否則,在主頁之間切換時總是重新創建堆棧(Other => Tabs => Other => ..)

根堆棧的Html:

<ion-nav-view name="default"></ion-nav-view>

控制器:

 .state('other', {
      url: "/other",
      views: {
        'default': {
          templateUrl:       "templates/other.html",
        }
        },
.state('tabs', {
      url: "/tab",
      abstract: true,
     views: {
        'default': {
          templateUrl:       "templates/tabs.html",
        }
     }
    })

在標籤模板內部,我為不同的標籤頁分配了一個新的離子導航視圖(在默認的離子標籤模板中完成)

例如,對於home-tab(和home堆棧),Html看起來像這樣(pages home,facts):

<ion-nav-view name="home-tab"></ion-nav-view>

控制器:

.state('tabs.home', {
      url: "/home",
      views: {
        'home-tab': {
          templateUrl: "templates/home.html",
        },

      }
    })
    .state('tabs.facts', {
      url: "/facts",
      views: {
        'home-tab': {
          templateUrl: "templates/facts.html",
        },          
      }
    })

我還提交了上面的codepen的錯誤報告。 它錯誤地切換回曆史。 https://github.com/driftyco/ionic/issues/4086

我不確定我的修復方法。 也許歷史記錄功能需要在全球範圍內進行重新設計以解決問題。

Question

我正在使用ionic v1.0.0並且不了解$ionicHistory管理的並行歷史記錄的工作方式。

特別是在Android設備上,當使用(以前的硬件)後退按鈕時,我的Angular應用程序有時表現得很奇怪,我想了解原因。 (示例:導航回來打開由$ionicGoBack()很久以前關閉的視圖)

對我來說,似乎有些ui-router導航創建了新的歷史堆棧,而其他人則將歷史項目放在根歷史中,即使從狀態轉到子狀態也應該附加到狀態記錄為IMO的歷史記錄中。

問題

  • 任何人都可以解釋在哪些情況下ui-sref$state.go(...)將歷史項附加到新創建的堆棧中?
  • 什麼時候他們被附加到root
  • 模態是否以特殊方式處理?

很抱歉沒有更具體,但應用程序相當複雜,我不知道如何在一個plunkr中隔離問題。 也許我錯過了一篇很好的文檔......




Related