如何跳出小程序五级页面的限制

前言:做小程序开发,就要在微信的规则内玩耍。最近做的小程序经常会有个报错:RangeError: Maximum call stack size exceeded。这意思是说小程序页面超过5级跳转了,应该怎么解决呢?

微信小程序官方文档中,关于页面的跳转,有三个API,两个跳转新页面的 API 分别为 wx.navigateTowx.redirectTo,还有一个 API 名为 wx.navigateBack,它用于返回上级页面。

wx.navigateBack 在小程序的初始版本中只能回到上一个页面,在最新版本(0.10.102800)的更新中给 navigateBack 添加了一个参数 delta,用于决定需要返回几层页面。

navigator 组件的默认跳转方式与 wx.navigateTo 相同,而如果添加 redirect属性,则与 wx.redirectTo 的跳转方式相同。

wx.navigateTo 在官方文档中描述如下:

保留当前页面,跳转到应用内的某个页面,使用 wx.navigateBack 可以返回到原页面。

通过 navigateTo 跳转后,可点击左上角的按钮返回上一个页面。而如果多次调用 navigateTo 之后,就需要返回多次才能回到初始页面,这种交互更像是客户端打开一个新的view。因此,官方在此处有一个限制(最多五级)。

注意:为了不让用户在使用小程序时造成困扰,我们规定页面路径只能是五层,请尽量避免多层级的交互方式。

不过上述五层的限制只是针对 navigateToredirectTo 则无此限制。因为 redirectTo 的行为是:

关闭当前页面,跳转到应用内的某个页面。

因此,当页面个数超过五层时,应该用redirectTo来替换navigateTo,就可以避免Maximum call stack size exceeded的异常,但是redirectTo关闭当前页面的做法,有些场景并不适用,比如,从列表页进详情页面,如果进入详情页面时,关闭列表页面,再次back时,就没办法回到列表页面。

通过 redirectTo 跳转后,只是无法返回跳转前的页面,但并不是无法调用 navigateBack,而是调用之后,会回到使用 redirectTo 跳转前的上一个页面。

页面栈可以通过 getCurrentPages 方法获取:

getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。

这个方法也比较适用,在多层页面跳转中,你可能会用的到。

原文发布于微信公众号 - 知晓程序员(bainaweb)

原文发表时间:2017-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏macOS 开发学习

一步一步,开始上手Mac 开发(二)

2.2 选中MasterViewController.xib 选中view,然后把它拖动的更宽更高,不必在意具体的尺寸细节,要能够放下新的控件就可以。

1052
来自专栏谦谦君子修罗刀

RN项目第一节

一、项目说明 本项目为模仿美团的项目,采用的是网上提供的API接口。导航采用 公司推荐的react-navigation,滚动条采用第三方组件react-na...

3516
来自专栏编程

前端学习笔记03 js基础

js基础( js嵌入方式、输出语句) 1 s现在的作用 1、验证表单(以前的网速慢) 2、页面特效 (PC端的网页效果) 3、移动端 (移动 web 和app)...

1996
来自专栏更流畅、简洁的软件开发方式

页面回发后,让页面自动滚动到指定位置的一种简单的方法

最近某客户做实施,顺便完善一下程序。突然找到了一个老问题的解决方法。 就是当用户按一个按钮后,希望回发后的页面滚到一个指定的位置,而不是页面的开头部分。以...

2927
来自专栏从零开始学自动化测试

Selenium+python自动化83-chrome手机wap模式

一、前言 这里是群里(QQ群:226296743)风神出60大洋悬赏的问题,学会这篇就是赚了60大洋了! 我的环境: - chrome 62 - chrome...

4254
来自专栏菩提树下的杨过

图片的javascript延时加载

在页面很长(超过3屏)且图片又很多时,默认情况下浏览器会加载所有图片,有可能导致第二屏的图片显示出来了,但第一屏的图片还在加载,这种情况最适合用"javascr...

2046
来自专栏小俊博客

Windows10中的键盘快捷方式

Windows 徽标键 + Shift + C打开超级按钮菜单Windows 徽标键 + D显示和隐藏桌面Windows 徽标键 + Alt + D显示和隐藏桌...

1272
来自专栏用户2442861的专栏

Qt:QListWidget的item上实现右键菜单(空白的地方)

http://blog.csdn.net/lpmygod/article/details/38924427

5641
来自专栏hbbliyong

主题与皮肤

 主题和皮肤  •通过设置站点、页面、控件的指定属性以声明主题 •皮肤 = 控件的可视属性   –存在于后缀名为.skin的文件当中   –默认皮肤以...

3565
来自专栏Flutter入门到实战

Android Studio使用Vector创建矢量图并加载

3.选择Local file,然后选择SVG图形路径,点next --> finish 就好了。具体如图所示。

1111

扫码关注云+社区