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


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 相关文章推荐
javascript 动态添加表格行
Jun 22 Javascript
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
Aug 14 Javascript
extjs 学习笔记(一) 一些基础知识
Oct 13 Javascript
js 页面传参数时 参数值含特殊字符的问题
Dec 13 Javascript
jsp+javascript打造级连菜单的实例代码
Jun 14 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
Dec 18 Javascript
详解JavaScript常量定义
Jan 03 Javascript
AngularJS中ng-class用法实例分析
Jul 06 Javascript
基于vue.js无缝滚动效果
Jan 25 Javascript
微信小程序实现星星评价效果
Nov 02 Javascript
浅谈React Native 传参的几种方式(小结)
May 21 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
Oct 09 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与Java进行通信的实现方法
2013/10/21 PHP
php中hashtable实现示例分享
2014/02/13 PHP
twig里使用js变量的方法
2016/02/05 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
jQuery ajax cache缓存问题
2010/07/01 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
python实现的登录和操作开心网脚本分享
2014/07/09 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
浅谈python迭代器
2017/11/08 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
如何运行带参数的python脚本
2019/11/15 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
职务聘任书范文
2014/03/29 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
Python如何导出导入所有依赖包详解
2021/06/08 Python
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL
mysql 排序失效
2022/05/20 MySQL