微信小程序返回多级页面的实现方法


Posted in Javascript onOctober 27, 2017

微信小程序返回多级页面的实现方法

微信小程序开发中,返回上一页是很普遍的操作,最常见的是点击手机的返回键和点击自定义的按钮返回上一页这两种情况。点击手机的返回键我们不需要做处理,如果是自定义按钮实现返回效果,就要调用微信提供的API:

wx.navigateBack(OBJECT)

也可以通过 wx.navigateBack 方法实现返回多级页面,只要设置 delta 的值就可以:

//在C页面内 navigateBack,将返回A页面,delta = 1 时与 wx.navigateBack() 效果一致
wx.navigateBack({
 delta: 2
})

但是有些时候,我们需要实现点击手机的返回键,也返回上两页或者多页,这样子就不能直接用上面的方法来处理了。我用过下面的两种方法来实现:

方法一:在页面C的 onUnload 方法里面调用 wx.navigateBack() ,这样可以实现返回到页面A,不过会有个问题,如果把页面C分享到微信聊天会话里面,然后关闭小程序,再从聊天会话打开页面C,还会调用 wx.navigateBack() 方法,并且报这个异常:

WAService.js:9 navigateBack with an unexist webviewId 0

方法二:另一种方法是在页面B的 onShow 方法中调用 wx.navigateBack() 实现返回 ,这样就可以避免方法一中出现的问题。实现的思路如下:

① 在页面C的 onUnload 方法里面判断是否可以返回前n页,通过 getCurrentPages() 方法可以获取当前的页面栈,根据页面栈的长度判断可以返回的层数,并且可以给所有页面的 data 设置参数,这里以返回上两页为例:

//这里是页面C的 onUnload 方法
  onUnload: function() {
    var that = this

    //判断页面栈里面的页面数是否大于2
    if(getCurrentPages().length > 2) {
      //获取页面栈
      let pages = getCurrentPages()
      //给上一个页面设置状态
      let curPage = pages[pages.length - 2];
      let data = curPage.data;
      curPage.setData({'isBack': true});
    }
  },

② 在页面B的 onShow 方法里面根据 isBack 的值,判断是否调用 wx.navigateBack() :

//这里是页面B的 onShow 方法
  onShow: function() {
    var that = this
    //如果 isBack 为 true,就返回上一页
    if(that.data.isBack) {
      wx.navigateBack()
    }
  },

方法一和方法二都不是直接从页面C到页面A,都是要先经过页面B,所以会出现页面B闪一下的情况,大家如果有更好的方法可以告诉我。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
jquery获取复选框被选中的值
Apr 10 Javascript
JavaScript阻止浏览器返回按钮的方法
Mar 18 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
Sep 24 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
Oct 23 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
Nov 28 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
Dec 13 Javascript
微信小程序支付前端源码
Aug 29 Javascript
详解用Webpack与Babel配置ES6开发环境
Mar 12 Javascript
JavaScript中的连续赋值问题实例分析
Jul 12 Javascript
vue实现下拉加载其实没那么复杂
Aug 13 Javascript
详解ES6 Promise的生命周期和创建
Aug 18 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
Sep 21 Javascript
微信小程序-getUserInfo回调的实例详解
Oct 27 #Javascript
基于JavaScript实现报警器提示音效果
Oct 27 #Javascript
JavaScript数据结构之双向链表定义与使用方法示例
Oct 27 #Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
Oct 27 #jQuery
动态统计当前输入内容的字节、字符数的实例详解
Oct 27 #Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
Oct 27 #Javascript
node 利用进程通信实现Cluster共享内存
Oct 27 #Javascript
You might like
20个PHP常用类库小结
2011/09/11 PHP
php的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
php解析json数据实例
2014/08/19 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
浅析python中while循环和for循环
2019/11/19 Python
使用Pycharm分段执行代码
2020/04/15 Python
Python读写锁实现实现代码解析
2020/11/28 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
财务管理个人自荐书范文
2013/11/24 职场文书
学生保证书范文
2014/04/28 职场文书
责任书格式范文
2014/07/28 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
现实表现证明材料
2015/06/19 职场文书
Redis 哨兵集群的实现
2021/06/18 Redis
MySQL分区表管理命令汇总
2022/03/21 MySQL