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


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 相关文章推荐
网页右侧悬浮滚动在线qq客服代码示例
Apr 28 Javascript
js获取Get值的方法
Sep 29 Javascript
JS 终止执行的实现方法
Nov 24 Javascript
简单实现JavaScript图片切换效果
Nov 28 Javascript
JavaScript表单验证完美代码
Mar 02 Javascript
使用Math.max,Math.min获取数组中的最值实例
Apr 25 Javascript
vue实现app页面切换动画效果实例
May 23 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
Nov 22 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
Oct 24 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
Nov 13 Javascript
vue判断按钮是否可以点击
Apr 09 Vue.js
vue使用watch监听属性变化
Apr 30 Vue.js
微信小程序-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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
URL Rewrite的设置方法
2007/01/02 PHP
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
2017/10/13 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
javascript实现移动端轮播图
2020/12/09 Javascript
python实现井字棋游戏
2020/03/30 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Django中Forms的使用代码解析
2018/02/10 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
幼儿园家长会邀请函
2014/01/15 职场文书
幼儿园教师辞职信
2014/01/18 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
中秋节主持词
2014/04/02 职场文书
创先争优演讲稿
2014/09/15 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers