我们用ionic打包的app在真机上需要处理手机硬键盘的返回键,下面提供几种方法:
$ionicPlatform.registerBackButtonAction(callback, priority, [actionId])
这个方法一般放在app.js
文件下的run()
中,controller
中不起作用,实例如下:
1 | $ionicPlatform.ready(function() { |
参数 | 说明 |
---|---|
callback | 回调方法 |
priority | 优先级:常用的优先级有:100=返回上一个页面;150=side menu;200=关闭modal;300=关闭action sheet;400=关闭popup;500=关闭loading overlay;大于哪个就会覆盖掉哪个默认行为 |
actionId | 唯一id(选填) |
$ionicPlatform.onHardwareBackButton(callback)
这个方法可以写在controller
中,但有个很严重的bug,实例如下:
1 | $ionicPlatform.ready(function() { |
取消注册的返回事件:$ionicPlatform.offHardwareBackButton(callback)
我将此方法写入controller,在按返回键的时候,发生了很奇怪的事:
- 第一次进入此页面按返回键:console打印了一遍
- 第二次进入此页面按返回键:console打印了二遍
- 第三次进入此页面按返回键:console打印了三遍
我分析的原因:虽然事件注册在这个controller里,但是此事件是全局的,每次进入此页面都会多注册一次
解决方案:代码如下:
1 | $ionicPlatform.offHardwareBackButton($scope.goBack); |
document.addEventListener(‘backbutton’,function,false)
这个方法也有那个严重bug,跟上面的onHardwareBackButton
的bug一样.
因为:onHardwareBackButton
的源码就是封装的document.addEventListener(‘backbutton’,function,false)