在离子注册onHardwareBackButton事件时,后退按钮仍然使页面导航到上一页

时间:2015-10-28 08:18:54

标签: javascript angularjs cordova ionic-framework

我是离子的新手。我正在使用离心的onHardwareBackButton事件,事件工作正确它带我注册功能但是在去注册功能后它仍然导航到后页。 我在cordbackbutton事件函数上显示cordova确认dilogbox所以点击cancle之后他可以导航到后页,但是现在弹出窗口也会出现,页面也同时导航回来。我已经搜索并尝试了许多代码,如

e.preventDefault()

e.stopPropagation() 

他们两个都不合作 我也尝试过registerBackButtonAction事件,但是当我离开页面时它没有取消注册。 我很多时候都遇到了这个问题。 我正在使用的代码如下所示。

//this is register event i have used

showalertPopup = function(){
//showing popup
}

$scope.$on '$ionicView.enter', (event, view)->
    $ionicPlatform.registerBackButtonAction showalertPopup, 100

//like this i am diregistering event
$scope.$on '$ionicView.leave', (event, view)->
    $ionicPlatform.offHardwareBackButton showalertPopup

代替registerBackButtonAction我用过onHardwareBackButton

1 个答案:

答案 0 :(得分:1)

这里你可以做的是registerBackButtonAction,优先级为100(见docs):

  

现有后退按钮挂钩的优先级如下:
  返回上一个视图= 100
  关闭侧菜单= 150
  解除模态= 200
  关闭行动表= 300
  关闭popup = 400
  关闭加载overlay = 500

所以,基本上,你要覆盖“返回上一个视图”动作。
当您离开视图时,您将需要一个处理程序来取消注册:

var backbuttonRegistration = null;

$scope.$on('$ionicView.enter', function(event, viewData) {
    backbuttonRegistration = $ionicPlatform.registerBackButtonAction(function(e) {
            e.preventDefault();
            showalertPopup();
        }, 100);
});

$scope.$on('$ionicView.leave', function(event, viewData) {
    if (backbuttonRegistration)
    {
        backbuttonRegistration();
    }
});

根据文档,registerBackButtonAction

  

返回:一个函数,当被调用时,将取消注册它   backButtonAction。

您的控制器应如下所示:

  .controller('homeController', function($scope, $ionicPopup, $ionicPlatform) {

    function showalertPopup() {
      var alertPopup = $ionicPopup.alert({
        title: 'Don\'t eat that!',
        template: 'It might taste good'
      });
      alertPopup.then(function(res) {
        console.log('Thank you for not eating my delicious ice cream cone');
      });
    }

    var backbuttonRegistration = null;

    $scope.$on('$ionicView.enter', function(event, viewData) {
        backbuttonRegistration = $ionicPlatform.registerBackButtonAction(function(e) {
                e.preventDefault();
                showalertPopup();
            }, 100);
    });

    $scope.$on('$ionicView.leave', function(event, viewData) {
        if (backbuttonRegistration)
        {
            backbuttonRegistration();
        }
    });

});

PS:

你可以registerBackButtonAction具有最高优先级 - 让我们说1000 - 它会起作用:

    backbuttonRegistration = $ionicPlatform.registerBackButtonAction(function(e) {
            e.preventDefault();
            showalertPopup();
        }, 1000);