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


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的将DropDownlist的选中值赋给label的实现代码
May 06 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
Dec 15 Javascript
JS使用正则表达式除去字符串中重复字符的方法
Nov 05 Javascript
jQuery中的siblings用法实例分析
Dec 24 Javascript
解析Node.js异常处理中domain模块的使用方法
Feb 16 Javascript
Web开发必知Javascript技巧大全
Feb 23 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&”)
Dec 23 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
Apr 29 Javascript
vue2.0与bootstrap3实现列表分页效果
Nov 28 Javascript
JS实现登录页密码的显示和隐藏功能
Dec 06 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 jQuery
解决微信小程序scroll-view组件无横向滚动的问题
Feb 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
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
php 面向对象的一个例子
2011/04/12 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
把textarea中字符串里含有的回车换行替换成<br>的javascript代码
2007/04/20 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
javascript常用的方法整理
2015/08/20 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
Python中decorator使用实例
2015/04/14 Python
解析Python编程中的包结构
2015/10/25 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
初学者学习Python好还是Java好
2020/05/26 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
关于VPN
2012/06/10 面试题
党员的自我评价范文
2014/01/02 职场文书
见习报告怎么写
2014/10/31 职场文书
幽灵公主观后感
2015/06/09 职场文书
体育委员竞选稿
2015/11/21 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
SQL Server删除表中的重复数据
2022/05/25 SQL Server