2016-11-17 2 views
0

Actuellement, le bouton de commande de retour arrière sur une page particulière fonctionne sur le Tab-SubTab (A) particulier que je l'applique à - sur SubTabA, le bouton retour me ramène à TabA, mais le $ scope. $ on ('$ destroy ...) ne semble pas fonctionner. Parce que si à partir Tab-SubTab (A) et je navigue directement à une autre page Tab-SubTab (C) - le bouton retour sur Tab-SubTab (C) me ramène directement à TabA au lieu de revenir à TabC. En outre, si je retourne à TabC - il me prend directement dans Tab-SubTabC (parce que c'est là où il s'est arrêté la dernière fois) et je ne peux jamais revenir dans TabC.comment restaurer ionique backbutton après override? - bouton de retour arrière sur d'autres onglets

ci-dessous est mon contrôleur pour la page particulière/Tab Je suis sur: empêcherait que cela se produise, mais il est évident

$scope.$on('$ionicView.beforeEnter', function(){ 
     // some none related stuff here. 
    }) ; 
    // custom back button to send user to master Rides tab no matter how many subviews they navigate to 
    // 
    // 
    var doCustomBack = function() { 
     $state.transitionTo('tab.rides'); 
    }; 
    // override soft back 
    // framework calls $rootScope.$ionicGoBack when soft back button is pressed 
    var oldSoftBack = $rootScope.$ionicGoBack; 
    $rootScope.$ionicGoBack = function() { 
     doCustomBack(); 
    }; 
    var deregisterSoftBack = function() { 
     $rootScope.$ionicGoBack = oldSoftBack; 
    }; 
    // override hard back 
    // registerBackButtonAction() returns a function which can be used to deregister it 
    var deregisterHardBack = $ionicPlatform.registerBackButtonAction(
     doCustomBack, 101 
); 
    // cancel custom back behaviour 
    $scope.$on('$destroy', function() { 
     deregisterHardBack(); 
     deregisterSoftBack(); 
    }); 

Je pensais que la portée de $ $ sur (« détruire $ » ...). ce n'est pas.

visuelle de navigation:

Tab A (controller: tabA) 
    -> Sub Tab A1 (controller: subTabA) <- above backbutton overrides here 
Tab B (controller: tabB) 
    -> Sub Tab B1 (controller: subTabB) 
Tab C (controller: tabC) 
    -> Sub Tab C1 (controller: subTabC) 
Tab D (controller: tabD) 

à travers le dessus de mon application est

HOME TabA  TabB  TabC  TabD 

If I got to TabA -> SubTabA, click back button, takes me back to TabA 
If I got to TabA -> SubTabA, then go directly to TabC (from top of app) then to -> SubTabC, 
the back button on SubTabC takes me directly back to TabA content. 

Répondre

0

Le problème a été destroy $ n'a pas été assez rapide avant le déclenchement de la stateChange. La motion est proposée à ceci:

  1. changement: var oldSoftBack = $rootScope.$ionicGoBack à:

$rootScope.oldSoftBack = $rootScope.$ionicGoBack ;

  1. Au lieu de $scope.$on('$destroy'...) utiliser ceci:

var backStateChangeWatcher = $rootScope.$on('$stateChangeStart', function() { 
 
    if($rootScope.oldSoftBack){ 
 
    deregisterHardBack(); 
 
    deregisterSoftBack(); 
 
    // Un-register watcher 
 
    backStateChangeWatcher(); 
 
    } 
 
}) ;

+0

Hi! J'ai le même problème. J'ai essayé votre solution, mais je peux toujours le reproduire. Pourriez-vous s'il vous plaît jeter un oeil à mon [extrait] (https://jsbin.com/yugoqahene/edit?js)? Peut-être que vous remarquerez un problème. Merci d'avance! –

+0

Reportez-vous à ce fil, je pense que tout ce dont vous avez besoin est ici (puisque vous déployez la méthode en tant que service). http://stackoverflow.com/questions/32231737/ionic-override-all-back-button-behaviour-for-specific-controller – rolinger