gpt4 book ai didi

angularjs - ionic + android 后退按钮 + sidemenu isOpen 检测 - 工作不可靠

转载 作者:行者123 更新时间:2023-12-01 09:54:17 27 4
gpt4 key购买 nike

我有一个奇怪的情况。我正在编写一个带有左滑动菜单的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com