我有一个奇怪的情况。我正在编写一个带有左滑动菜单的 Angular + ionic 应用程序,这是我正在尝试做的事情:
1) 捕获 Android 后退按钮 2)当你点击后退按钮时,如果菜单没有打开,带你到菜单(打开它) 3) 如果菜单已打开并且您点击了后退按钮,请退出应用
为了捕获后退按钮,我在 app.run 中有这段代码(也尝试重新定位到一个基本 Controller 并将它与 $controller 一起注入(inject)到其他 Controller 中,没有任何区别)
我注意到的是,如果我真的点击菜单的“菜单图标”,“isOpen”会在我打开和关闭菜单时可靠地交替打印 true/false
但是,当我点击 Android 后退按钮时,它第一次工作(打印 true 或 false),但每次后续点击都不会改变 isOpen 状态,而菜单实际上会切换。
因此,这使我无法以编程方式检测菜单是在 android 后退按钮处理程序中打开还是关闭。
令我困惑的是,为什么这只是 android 后处理程序中的问题,而不是当我点击菜单项时的问题。在这两种情况下调用的代码相同,即
$ionicSideMenuDelegate.toggleLeft();
我的 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);
我还设置了一个 codepen,虽然不确定如何在 android 设备上测试它,因为每次我尝试点击 codepen 或 jsfiddle 上的后退按钮时,它都会使浏览器返回一个页面。
对正在发生的事情有任何了解吗?我在 ionic 论坛上问过,但还不能找出原因(还)--> 因此向 SO 社区发帖,希望它能吸引更广泛的受众。
最佳答案
registerBackButtonAction
需要 priority覆盖其他操作:
The priorities for the existing back button hooks are as follows: Return to previous view = 100 Close side menu = 150 Dismiss modal = 200 Close action sheet = 300 Dismiss popup = 400 Dismiss loading overlay = 500
Your back button action will override each of the above actions whose priority is less than the priority you provide. For example, an action assigned a priority of 101 will override the 'return to previous view' action, but not any of the other actions.
我已经测试了这段代码,它按预期工作:
.run(function($ionicPlatform, $ionicSideMenuDelegate, $ionicPopup) {
$ionicPlatform.registerBackButtonAction(function(e) {
e.preventDefault();
if (!$ionicSideMenuDelegate.isOpenLeft()) {
$ionicSideMenuDelegate.toggleLeft();
} else {
navigator.app.exitApp();
}
}, 1000);
});
如您所见,我使用优先级 1000 来确保覆盖所有默认操作。
我还使用了 preventDefault()
。我认为您不需要这个,但以防万一。
这段代码只适用于左侧菜单,因为我只检查:
$ionicSideMenuDelegate.isOpenLeft()
只打开左边的:
$ionicSideMenuDelegate.toggleLeft()
但您可以更改它以使用 right菜单也是如此。
更新:
如果有人有兴趣了解更多关于 Android 和后退按钮的信息,这是最好的 article到目前为止我已经读完了。
关于angularjs - ionic + android 后退按钮 + sidemenu isOpen 检测 - 工作不可靠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31541112/