2015-01-19 2 views
7

У меня проблемы с использованием $ionicHistory на страницах, где используются ion-tabs. Я использую это для перехода к предыдущему виду (используя goBack()). Когда я помещаю вкладки в представление, история неверна, назад вид - два представления раньше.

Чтобы продемонстрировать это, я создал демонстрационное приложение (plunker here), которое имеет 4 страницы/виды. Страница 1 -> Страница 2 -> Страница 3 -> Страница 4. На последней странице есть вкладки.

angular 
.module("demoapp", ['ionic']) 
.config(['$stateProvider', '$urlRouterProvider', 
    function($stateProvider, $urlRouterProvider){ 
    $stateProvider 
     .state('first', { 
      url: '/', 
      controller: 'firstController', 
      templateUrl: 'first.html', 
     }) 
     .state('second', { 
      url: '/second', 
      controller: 'secondController', 
      templateUrl: 'second.html', 
     }) 
     .state('third', { 
      url: '/third', 
      controller: 'thirdController', 
      templateUrl: 'third.html', 
     }) 
     .state('fourth', { 
      url: '/fourth', 
      controller: 'fourthController', 
      templateUrl: 'fourth.html', 
     }); 

    $urlRouterProvider.otherwise("/"); 
    }]) 
.factory("historyFactory", ['$ionicHistory', function($ionicHistory){ 
    var show = function() { 
    var text = ""; 

    var vh = $ionicHistory.viewHistory(); 
    if(vh !== null) { 
     text += "VIEWS=" + JSON.stringify(vh.views); 
     text += "BACK=" + JSON.stringify(vh.backView); 
    } 

    return text; 
    } 

    return { 
    show : show, 
    } 
}]) 
.controller("firstController", [ 
    '$scope', 
    '$location', 
    function($scope, $location){ 
    $scope.next = function() { 
    $location.path("/second"); 
    }; 
}]) 
.controller("secondController", [ 
    '$scope', 
    '$location', 
    '$ionicHistory', 
    'historyFactory', 
    function($scope, $location, $ionicHistory, historyFactory){ 
    $scope.next = function() { 
     $location.path("/third"); 
    }; 

    $scope.prev = function() { 
     $ionicHistory.goBack(); 
    }; 

    var init = function() { 
     $scope.data = historyFactory.show(); 
    }; 

    init(); 
}]) 
.controller("thirdController", [ 
    '$scope', 
    '$location', 
    '$ionicHistory', 
    'historyFactory', 
    function($scope, $location, $ionicHistory, historyFactory){ 
    $scope.next = function() { 
     $location.path("/fourth"); 
    }; 

    $scope.prev = function() { 
     $ionicHistory.goBack(); 
    }; 

    var init = function() { 
     $scope.data = historyFactory.show(); 
    }; 

    init(); 
}]) 
.controller("fourthController", [ 
    '$scope', 
    '$ionicHistory', 
    'historyFactory', 
    function($scope, $ionicHistory, historyFactory){ 
    $scope.prev = function() { 
     $ionicHistory.goBack(); 
    }; 

    var init = function() { 
     $scope.data = historyFactory.show(); 
    }; 

    init(); 
}]); 

Это, как вид с закладками выглядит следующим образом:

<ion-view> 

    <ion-tabs class="tabs-balanced"> 
    <ion-tab title="Tab One"> 
     <ion-header-bar class="bar-balanced"> 
     <div class="buttons"> 
      <button class="button button-icon ion-ios-arrow-back" ng-click="prev()"></button> 
     </div> 
     <h1 class="title">Page 4 - Tab 1</h1> 
     </ion-header-bar> 

     <ion-content class="has-header"> 
      <h3>History</h3> 
      <p>{{data}}</p> 
     </ion-content> 
    </ion-tab>  
    </ion-tabs> 

</ion-view> 

На второй странице, история зрения выглядит следующим образом:

На третьей странице, еще один вид деятельности:

VIEWS= 
{"002":{"viewId":"002","index":0,"historyId":"root","backViewId":null,"forwardViewId":"003","stateId":"first","stateName":"first","url":"/"}, 
"003":{"viewId":"003","index":1,"historyId":"root","backViewId":"002","forwardViewId":"004","stateId":"second","stateName":"second","url":"/second"}, 
"004":{"viewId":"004","index":2,"historyId":"root","backViewId":"003","forwardViewId":null,"stateId":"third","stateName":"third","url":"/third"}} 
BACK= 
{"viewId":"003","index":1,"historyId":"root","backViewId":"002","forwardViewId":"004","stateId":"second","stateName":"second","url":"/second"} 

Но на четвертой странице с ion-tabs история просмотров остается прежней.

VIEWS= 
{"002":{"viewId":"002","index":0,"historyId":"root","backViewId":null,"forwardViewId":"003","stateId":"first","stateName":"first","url":"/"}, 
"003":{"viewId":"003","index":1,"historyId":"root","backViewId":"002","forwardViewId":"004","stateId":"second","stateName":"second","url":"/second"}, 
"004":{"viewId":"004","index":2,"historyId":"root","backViewId":"003","forwardViewId":null,"stateId":"third","stateName":"third","url":"/third"}} 
BACK= 
{"viewId":"003","index":1,"historyId":"root","backViewId":"002","forwardViewId":"004","stateId":"second","stateName":"second","url":"/second"} 

Является ли это ошибка с $ionicHistory при использовании ion-tabs или я делаю что-то неправильно с точки зрения закладках?

+0

У меня более или менее та же проблема: http://stackoverflow.com/questions/28004332/ionic-tabs-and-side-menu-history. Вы пытались разместить четвертое государство внутри третьего? '.state ('third.fourth') {...' и перемещаться туда '/ третья/четвертая' – Miquel

ответ

1

Try обернуть Ионно-вкладку, чтобы избежать этой проблемы

<ion-view> 

    <div> 
    <ion-tabs class="tabs-balanced"> 
    <ion-tab title="Tab One"> 
     <ion-header-bar class="bar-balanced"> 
     <div class="buttons"> 
      <button class="button button-icon ion-ios-arrow-back" ng-click="prev()"></button> 
     </div> 
     <h1 class="title">Page 4 - Tab 1</h1> 
     </ion-header-bar> 

     <ion-content class="has-header"> 
      <h3>History</h3> 
      <p>{{data}}</p> 
     </ion-content> 
    </ion-tab> 

    <ion-tab title="Tab Two"> 
     <ion-header-bar class="bar-balanced"> 
     <div class="buttons"> 
      <button class="button button-icon ion-ios-arrow-back" ng-click="prev()"></button> 
     </div> 
     <h1 class="title">Page 4 - Tab 2</h1> 
     </ion-header-bar> 

     <ion-content class="has-header"> 
      <p>Content of tab 2.</p> 
     </ion-content> 
    </ion-tab> 

    </ion-tabs> 
    </div> 

</ion-view> 

http://plnkr.co/edit/pVDu9e7QZHzMt3A154i7?p=preview

0

ion-tabs ввести параллельные стеки для поддержания истории каждой вкладки и поэтому $ionicHistory.goBack изменяет состояние истории в текущем стеке. Вы можете решить проблему, удалив вкладку или добавив вкладки ко всем представлениям. Это прекрасное объяснение этому в этом сообщении SO: https://stackoverflow.com/a/31385026/3878940

0

Что работало для меня, это добавить пустой ионный вид над вкладками с ионами в самой верхней части страницы.

Я предполагаю, что это «обмануло» $ ionicHistory, полагая, что моя страница отображала обычный вид, а не вкладку.

Смежные вопросы