ionic + android后退按钮+ sidemenu isOpen detection - 无法正常工作

use*_*529 3 angularjs ionic-framework

我有一个奇怪的情况.我正在写一个带有左滑动菜单的角度+离子应用程序,这是我想要做的:

1)陷阱Android后退按钮2)当您点击后退按钮时,如果菜单未打开,请转到菜单(打开它)3)如果菜单已打开并且您点击后退按钮,则退出应用程序

为了捕获后退按钮,我在app.run中有这个代码(也尝试重新定位到基本控制器并将其与$ controller注入其他控制器,没有什么区别)

我注意到的是,如果我实际点击菜单的"菜单图标","isOpen"会在我打开和关闭菜单时可靠地打印真/假

但是,当我点击Android后退按钮时,它第一次工作(打印为true或false),但每次后续点击都不会改变isOpen状态,而菜单实际上会切换.

因此,我无法以编程方式检测菜单是否在android后退按钮处理程序中打开或关闭.

令我困惑的是为什么这只是android后台处理程序中的一个问题,而且当我点击菜单项时没有问题.它是在两种情况下调用的相同代码,即

$ionicSideMenuDelegate.toggleLeft();
Run Code Online (Sandbox Code Playgroud)

我的Android处理程序代码:

 $ionicPlatform.registerBackButtonAction(function (event) {
             $ionicSideMenuDelegate.toggleLeft();
        $ionicSideMenuDelegate.$getByHandle('sideMenu').toggleLeft();
            $timeout ( function() {
            console.log ("Status of SIDE MENU IS : " + $ionicSideMenuDelegate.$getByHandle('sideMenu').isOpen());
            },1000);

}, 100);
Run Code Online (Sandbox Code Playgroud)

我也设置了一个codepen,虽然不确定如何测试它和android设备,因为每次我尝试在codepen或jsfiddle上点击后退按钮时,它会让浏览器返回页面.

对正在发生的事情的任何见解?我已经在离子论坛上提出过要求,但未能找到原因(还) - >因此向SO社区发帖,希望它能够覆盖更广泛的受众.

Lef*_*tyX 7

registerBackButtonAction需要优先级来覆盖其他操作:

现有后退按钮挂钩的优先级如下:返回上一个视图= 100关闭侧菜单= 150关闭模式= 200关闭操作表= 300关闭弹出= 400关闭加载叠加= 500

您的后退按钮操作将覆盖上述每个优先级低于您提供的优先级的操作.例如,分配优先级为101的操作将覆盖"返回上一个视图"操作,但不会覆盖任何其他操作.

我已经测试了这段代码,它按预期工作:

.run(function($ionicPlatform, $ionicSideMenuDelegate, $ionicPopup) {
        $ionicPlatform.registerBackButtonAction(function(e) {
            e.preventDefault();
            if (!$ionicSideMenuDelegate.isOpenLeft()) {
                $ionicSideMenuDelegate.toggleLeft();
            } else {
                navigator.app.exitApp();
            }
        }, 1000);   
});
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我使用了优先级1000来确保我覆盖所有默认操作.

我也用过preventDefault().我不认为你需要这个,但为了以防万一.

这段代码仅适用于左侧菜单,因为我只检查:

$ionicSideMenuDelegate.isOpenLeft()
Run Code Online (Sandbox Code Playgroud)

并且只打开左边的一个:

$ionicSideMenuDelegate.toggleLeft()
Run Code Online (Sandbox Code Playgroud)

但您也可以将其更改为使用正确的菜单.

更新:

如果有人有兴趣了解有关Android和Back Button的更多信息,那么这是我迄今为止阅读的最佳文章.