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


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 相关文章推荐
15个常用的jquery代码片段
Dec 19 Javascript
js实现n秒倒计时后才可以点击的效果
Dec 20 Javascript
js实现动态创建的元素绑定事件
Jul 19 Javascript
vue双向数据绑定原理探究(附demo)
Jan 17 Javascript
原生Javascript插件开发实践
Jan 18 Javascript
vue分类筛选filter方法简单实例
Mar 30 Javascript
node.js中grunt和gulp的区别详解
Jul 17 Javascript
使用JavaScript开发跨平台的桌面应用详解
Jul 27 Javascript
vue elementui form表单验证的实现
Nov 11 Javascript
微信小程序如何获取地址
Dec 24 Javascript
前端开发基础javaScript的六大作用
Aug 06 Javascript
Node.js path模块,获取文件后缀名操作
Nov 07 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 cron中的批处理
2008/09/16 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
深入讲解Python中的迭代器和生成器
2015/10/26 Python
Python可变参数用法实例分析
2017/04/02 Python
python面向对象法实现图书管理系统
2019/04/19 Python
Python中请不要再用re.compile了
2019/06/30 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
python 字符串格式化的示例
2020/09/21 Python
python 制作简单的音乐播放器
2020/11/25 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
悦木之源美国官网:Origins美国
2016/08/01 全球购物
淘宝网店营销策划书
2014/01/11 职场文书
党支部活动策划方案
2014/08/18 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
超市员工辞职信范文
2015/05/12 职场文书
工作年限证明范本
2015/06/15 职场文书
严以律己学习心得体会
2016/01/13 职场文书
会计做账心得体会
2016/01/22 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
javascript的var与let,const之间的区别详解
2022/02/18 Javascript