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


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 Study Notes学习笔记 (二)
Aug 04 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
Jun 07 Javascript
Javascript调试之console对象——你不知道的一些小技巧
Jul 10 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
了解ESlint和其相关操作小结
May 21 Javascript
JavaScript设计模式之单例模式简单实例教程
Jul 02 Javascript
微信小程序实现的自定义分享功能示例
Feb 12 Javascript
解决layer弹出层msg的文字不显示的问题
Sep 11 Javascript
Vue项目打包压缩的实现(让页面更快响应)
Mar 10 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
Apr 01 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
Aug 12 Javascript
JavaScript实现瀑布流布局的3种方式
Dec 27 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
PHP学习之PHP表达式
2006/10/09 PHP
PHP与javascript的两种交互方式
2006/10/09 PHP
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
php解决约瑟夫环示例
2014/04/09 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
javascript学习笔记(十二) RegExp类型介绍
2012/06/20 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
javascript常用功能汇总
2015/07/05 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python获取指定字符前面的所有字符方法
2018/05/02 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
python的faker库用法
2019/11/28 Python
Python远程linux执行命令实现
2020/11/11 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
中专三年学习的个人自我评价
2013/12/12 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
个人作风建设心得体会
2014/10/22 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
2016入党积极分子党校培训心得体会
2016/01/06 职场文书