子URL

时间:2016-05-06 16:23:02

标签: angularjs ionic-framework angular-ui-router

在我的Ionic应用程序中,特别是在使用Chrome中的离子服务进行测试时,我在使用离子标签进行导航时看到了奇怪的行为。如果我将页面加载为根路由(http://localhost:8100/#),导航和状态工作正常。我可以点击页面底部的任何标签(iOS视图)并获得预期的行为。

现在,如果我加载其中一个嵌套视图的URL,然后单击选项卡返回到该父视图,则只显示我输入的子视图。

示例(借用Ionic的夜间笔): http://codepen.io/ionic/pen/odqCz#/tab/facts2

在没有#/ tab / facts2的情况下输入上面的codepen时,导航按预期发生 - 我可以点击“科学事实”'按钮,向下导航几个孩子,然后点击“主页”按钮。图标并返回根目录。

当输入第二个网址时,我会按照我的预期直接进入facts2页面。但是,点击' Home' icon总是把我带回事实2。

<ion-tab title="Home" icon="ion-home" href="#/tab/home">
    <ion-nav-view name="home-tab"></ion-nav-view>
</ion-tab>

有趣的是,如果我使用&#39; home&#39;在fact2页面上的按钮,它确实正确导航到主页,但导航图标将无效。

<a class="button icon ion-home" href="#/tab/home"> Home</a>

有什么我不了解ui-router / state更改是如何工作的,还是这个bug?我主要担心的是,当编译和部署此应用程序,并且用户将程序保留在其中一个子状态中,然后重新打开时,导航栏将会中断。

1 个答案:

答案 0 :(得分:0)

<ion-nav-view name="home-tab"></ion-nav-view>加载您对配置文件的stateprovider声明的视图。如果首先加载辅助视图,则无法创建正确的导航历史记录,您将无法返回主选项卡视图。 name属性与您的名称相同:

views: {
        'home-tab': {
          templateUrl: "templates/home.html",
          controller: 'HomeTabCtrl'
        }
      }

因此,如果您想加载辅助视图,请先添加:

 $scope.$on('$ionicView.beforeEnter', function (event, viewData) {
    $ionicHistory.clearCache();
});

在主选项卡视图控制器中,它将清除View缓存并替换为右视图/ html。

另一种方法是使用您想要的状态副本,该副本将作用于您正在使用的当前视图,例如:

    $stateProvider
    .state('tabs', {
      url: "/tab",
      abstract: true,
      templateUrl: "templates/tabs.html"
    })
    .state('tabs.home', {
      url: "/home",
      views: {
        'home-tab': {
          templateUrl: "templates/home.html",
          controller: 'HomeTabCtrl'
        }
      }
    })
    .state('tabs.facts', {
      url: "/facts",
      views: {
        'home-tab': {
          templateUrl: "templates/facts.html"
        }
      }
    })
    .state('tabs.facts2', {
      url: "/facts2",
      views: {
        'home-tab': {
          templateUrl: "templates/facts2.html"
        }
      }
    })
    .state('tabs.about', {
      url: "/about",
      views: {
        'about-tab': {
          templateUrl: "templates/about.html"
        }
      }
    })
   .state('tabs.aboutFacts2', {
      url: "/about/facts2",
      views: {
        'about-tab': {
          templateUrl: "templates/facts2.html"
        }
      }
    })

这不会解决您的问题,但也不会导致问题。 Facts2正在取代两个不同的视图,可以从两个不同的上下文访问,保持导航历史记录紧密。