[Angularjs] 離子歷史是如何工作的,何時創建非根堆棧?


Answers

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

歷史堆棧總是鏈接到“ion-nav-view”模板。 所以根歷史堆棧是為第一個“ion-nav-view”項目創建的。

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

在這個CodePen中,你有一個用於標籤頁和其他頁面(名為“標籤”,“其他”,“other1”)的RootStack,然後在標籤頁面中,每個標籤有一個子堆棧。 標籤頁和其他頁面在Root ion-nav-view中運行。 在我的測試過程中,我需要為根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",
        }
     }
    })

在選項卡模板中,我為不同的選項卡堆棧指定了一個新的ion-nav-view(如在默認的離子選項卡模板中完成的那樣)

例如,對於家庭標籤(和家庭堆棧),Html看起來像這樣(頁面主頁,事實):

<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

我正在使用離子 v1.0.0,不明白由$ionicHistory管理的平行歷史的作品。

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

對我來說,似乎一些UI路由器導航創建新的歷史堆棧,而其他人將歷史項目放在根歷史記錄中,即使從狀態到子狀態應追加到記錄狀態的歷史IMO。

問題

  • 任何人都可以解釋在哪些情況下, ui-sref$state.go(...)將歷史記錄添加到新創建的堆棧中?
  • 他們什麼時候被追加到root
  • 模態是以一種特殊的方式對待嗎?

對不起,沒有更具體的,但應用程序是相當複雜的,我不知道如何孤立在一個單一的問題。 也許我錯過了一個很好的文檔...