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


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 相关文章推荐
实现点击列表弹出列表索引的两种方式
Mar 08 Javascript
浅析document.ready和window.onload的区别讲解
Dec 18 Javascript
禁用Enter键表单自动提交实现代码
May 22 Javascript
jQuery常用操作方法及常用函数总结
Jun 19 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
Jun 18 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
Sep 14 Javascript
js性能优化技巧
Nov 29 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
May 30 Javascript
详细讲解JavaScript中的this绑定
Oct 10 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
Dec 13 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
May 23 jQuery
js实现前面自动补全位数的方法
Oct 10 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
jQuery代码实现表格中点击相应行变色功能
2016/05/09 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
Python制作刷网页流量工具
2017/04/23 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
浅析Git版本控制器使用
2017/12/10 Python
python3大文件解压和基本操作
2017/12/15 Python
Python continue继续循环用法总结
2018/06/10 Python
python matlibplot绘制3D图形
2018/07/02 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
微笑面对生活演讲稿
2014/05/13 职场文书
环保倡议书400字
2014/05/15 职场文书
社区反邪教工作方案
2014/06/16 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
幼师辞职信范文
2015/02/27 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA