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


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 相关文章推荐
简略的前端架构心得&&基于editor为例子的编码小技巧
Nov 25 Javascript
图标线性回归斜着移动到指定的位置
Aug 16 Javascript
Java/JS获取flash高宽的具体方法
Dec 27 Javascript
Three.js基础学习之场景对象
Sep 27 Javascript
vue better-scroll插件使用详解
Jan 25 Javascript
Vue动态创建注册component的实例代码
Jun 14 Javascript
详解mpvue实现对苹果X安全区域的适配
Jul 31 Javascript
深入理解Antd-Select组件的用法
Feb 25 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
May 31 Javascript
基于原生js实现九宫格算法代码实例
Jul 03 Javascript
JavaScript中的函数式编程详解
Aug 22 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
Sep 04 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多个文件上传到服务器实例
2014/10/29 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
JS根据生日算年龄的方法
2015/05/05 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
python django事务transaction源码分析详解
2017/03/17 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
python读取mysql数据绘制条形图
2020/03/25 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
animation和transition的区别
2020/10/12 HTML / CSS
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
高中语文教学反思
2014/01/16 职场文书
党员一句话承诺大全
2014/03/28 职场文书
《泉水》教学反思
2014/04/11 职场文书
户外宣传策划方案
2014/05/25 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL