uni-app自定义返回逻辑教程
自 HBuilderX v1.1.0 起,uni-app 的页面新增 onBackPress(event)
生命周期函数。
onBackPress(event)
返回 event ={form: backbutton | navigateBack}
说明
当用户进行以下操作时,会触发该函数:
- Android 实体返回键 (
form = backbutton
) - 顶部导航栏左边的返回按钮 (
form = backbutton
) - 返回 API,即
uni.navigateBack()
(form = navigateBack
)
注意事项:
- 只有在该函数中返回值为 true 时,才表示不执行默认的返回,自行处理此时的业务逻辑。
- 不返回或返回其它值,均会执行默认的返回行为。
- H5 平台,顶部导航栏返回按钮支持
onBackPress()
,浏览器默认返回按键及Android手机实体返回键不支持onBackPress()
- 暂不支持直接在自定义组件中配置该函数,目前只能是在页面中来处理。
场景示例
页面返回
场景说明:
页面中的遮罩处于显示状态时,点击返回不希望直接关闭页面,而是隐藏掉遮罩。遮罩隐藏后,继续点击返回再执行默认的逻辑。
自定义遮罩
通常自定义的遮罩/弹出层,都会做成组件,这样方便复用。
新建 uni-app 项目->components->mask.vue 文件,代码如下:
<template> <view> <view class="cpt-mask"> </view> </view> </template> <script> export default {} </script> <style> .cpt-mask { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: #000000; opacity: 0.5; z-index: 99; } </style>
引用遮罩组件
在页面中引入 mask 自定义组件后,通过一个状态值来控制其隐藏/显示。
<mask v-if="showMask"></mask>
这里用 v-if,不要用 v-show,自定义组件存在一些问题待优化。
处理返回逻辑
在 onBackPress 中,判定当前遮罩是否处于显示状态。如果显示,则关闭遮罩并返回 true。
onBackPress() { if(this.showMask) { this.showMask = false; return true; } },
多级返回
部分业务场景下,返回的逻辑中需要返回多级页面。
由于 uni.navigateBack() 同样会触发 onBackPress 函数。因此在 onBackPress 中直接调用 uni.navigateBack() 并始终返回 true 会引发死循环。
此时,需要根据 onBackPress 的回调对象中的 from 值来做处理,当来源是 'navigateBack' 时,返回 false。
<template> <view> </view> </template> <script> export default { data() { return {}; }, onBackPress(options) { if (options.from === 'navigateBack') { return false; } this.back(); return true; }, methods: { back() { uni.navigateBack({ delta: 2 }); } }, } </script> <style> </style>
应用退出
场景说明:
若在App首页,点击手机物理返回键,此时无返回页面可关闭,uni-app默认会提示“再按一次退出应用”;若想自定义退出信息,如修改为:出现一个拟态窗口提示我们是否退出应用,点击确定退出应用。点击取消,不做操作。
实现方案:
在 onBackPress 中,遮罩不显示的状态下,点击返回键将弹出拟态窗。
onBackPress() { if(this.showMask) { this.showMask = false; return true; }else{ uni.showModal({ title: '提示', content: '是否退出uni-app?', success: function(res) { if (res.confirm) { // 退出当前应用,改方法只在App中生效 plus.runtime.quit(); } else if (res.cancel) { console.log('用户点击取消'); } } }); return true } },
实现效果如下图:
运行体验
完整的示例代码,见附件。解压后,拖至 HBuilderX 运行即可。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
uni-app 案例汇总
uni-app编译到App时,使用了DCloud的5+App引擎,该引擎跨iOS和Android,拥有众多案例,上线4年来产生几十万个App,有1.6亿手机用户在使用基于5+引擎开发的应用。详见https://dcloud.io/case/ uni-app于2018年7月发布,自发布以来活跃的开发者们已经创建了数十万个项目。我们相信还有更多优秀案例,没有被我们采集到,欢迎大家到项目案例征集提交。 官方示例 Hello uni-app:演示uni-app框架的组件、接口、模板,可以使用手机扫描下方App码下载iOS、Android原生安装包,也可以使用微信扫描小程序码,体验uni-app的小程序版本。 图片App模版:使用uni-app开发的图片App模版,包含单列图、双列图,图片分类,图片轮播、预览、下载,图片分享、收藏,设置桌面背景图等功能。 新闻/资讯类App模板:基于uni-app开发的新闻/资讯类App模板,兼容多个平台并使用 nvue 进一步优化在 App 上的体验。 第三方开发者案例 昆铁+:中国铁路昆明局官方应用。还可在微信中搜索“昆铁+”获得小程序。 ColorUI:C...
- 下一篇
【直播】机器学习就用PAI,带你一起现场训练热狗识别模型!
看过美剧《硅谷》的同学都知道人工智能识别热狗曾是硅谷最赚钱的技术之一。 去年 HBO 发布了官方的 Not Hotdog 应用,支持 iOS 和 Android 平台,据说是用 TensorFlow、Keras 和 React Native 打造的,但是源码没有公开。 这一次,就让阿里云的数据科学老司机带你一起,利用机器学习pai平台训练自己的热狗识别模型,打破技术封锁。让你出任CEO,迎娶白富美/高富帅,走上人生巅峰。本次发车名额有限,先到先得~ 发车时间:2019 年 5月 30日 19:00 到 20:00发车地点:线上直播环境 https://tianchi.aliyun.com/course/live?&liveId=41006报名地址:https://survey.aliyun.com/apps/zhiliao/L-
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G