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


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设置和去除disabled属性的5种方法总结
May 16 Javascript
微信小程序 navigation API实例详解
Oct 02 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
Nov 24 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
Dec 13 Javascript
js实现文字无缝向上滚动
Feb 16 Javascript
使用 Vue.js 仿百度搜索框的实例代码
May 09 Javascript
基于Vue开发数字输入框组件
Dec 19 Javascript
浅谈vue项目可以从哪些方面进行优化
May 05 Javascript
详解angular部署到iis出现404解决方案
Aug 14 Javascript
如何用Node写页面爬虫的工具集
Oct 26 Javascript
学习RxJS之JavaScript框架Cycle.js
Jun 17 Javascript
layui-table获得当前行的上/下一行数据的例子
Sep 24 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下通过file_get_contents的代理使用方法
2011/02/16 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
删除PHP数组中的重复元素的实现代码
2017/04/10 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
python实现画一颗树和一片森林
2018/06/25 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
小学生暑假感言
2014/02/06 职场文书
运动会通讯稿200字
2014/02/16 职场文书
毕业典礼主持词大全
2014/03/26 职场文书
优秀家长事迹材料
2014/05/17 职场文书
话题作文之学会尊重
2019/12/16 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
SQL基础的查询语句
2021/11/11 MySQL