在ionic on registering on HardwareBackButton事件中,后退按钮仍然使页面导航到上

in ionic on registering onHardwareBackButton event the back button still make page to navigate previous page

本文关键字:on 导航 按钮 HardwareBackButton registering ionic 事件      更新时间:2023-09-26

我是离子的新手。我使用的是ionic的onHardwareBackButton事件,该事件工作正常,它需要我注册函数,但在注册函数后,它仍在导航到主页。我在硬件后退按钮事件功能上显示了cordova确认对话框,这样在点击取消按钮后,他可以导航到主页,但现在弹出窗口也来了,页面也在同一时间导航回来。我搜索并尝试了许多代码,如

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

代替寄存器BackButtonAction,我在HardwareBackButton 上使用了

这里可以做的是优先级为100的registerBackButtonAction(请参阅文档):

现有后退按钮挂钩的优先级如下:
返回到上一个视图=100
关闭侧菜单=150
解散模式=200
关闭行动单=300
取消弹出窗口=400
解除加载覆盖=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);