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


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 相关文章推荐
IE与FireFox的JavaScript兼容问题解决办法
Dec 31 Javascript
javascript设计模式之中介者模式Mediator
Dec 30 Javascript
超精准的javascript验证身份证号的具体实现方法
Nov 18 Javascript
js 实现数值的千分位及保存小数方法(推荐)
Aug 01 Javascript
js实现日历的简单算法
Jan 24 Javascript
vue双向绑定简要分析
Mar 23 Javascript
vue.js+Echarts开发图表放大缩小功能实例
Jun 09 Javascript
Angular服务Request异步请求的实例讲解
Aug 13 Javascript
详解vue引入子组件方法
Feb 12 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
May 18 Javascript
通过js随机函数Math.random实现乱序
May 19 Javascript
JS原型对象操作实例分析
Jun 06 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
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
PHP数据过滤的方法
2013/10/30 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
php递归函数怎么用才有效
2018/02/24 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
php7下的filesize函数
2019/09/30 PHP
js 验证密码强弱的小例子
2013/03/21 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
selenium+python环境配置教程详解
2019/05/28 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
Python输出指定字符串的方法
2020/02/06 Python
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
老龄工作先进事迹
2014/08/15 职场文书
2015选调生工作总结
2015/07/24 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python
OpenCV 图像梯度的实现方法
2021/07/25 Python
Redis过期数据是否会被立马删除
2022/07/23 Redis