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

前言:做小程序开发,就要在微信的规则内玩耍。最近做的小程序经常会有个报错: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 条评论
登录 后参与评论

相关文章

来自专栏游戏杂谈

不使用定时器实现iframe的自适应高度

在微博上看到有人提及不使用定时器实现iframe自适应(onReadyStateChange + onLoad + onResize + onDOMSubtre...

1002
来自专栏疯狂的小程序

微信小程序充值操作流程

微信小程序的充值流程与 H5 或 公众号大致差不多,这里简单说一下前端在充值时候的一些操作流程。

3566
来自专栏用户2442861的专栏

HTML中使背景图片自适应浏览器大小

1、图片不够大,又background属性不能拉伸图片; 2、只能用个div,把其z-index值设为负,并使这个div大小为整个body大小,在div里用<...

611
来自专栏大前端_Web

event事件句柄的封装

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

783
来自专栏知晓程序

如何「掏空」小程序的五层页面限制? | 技术宝典

933
来自专栏欧阳大哥的轮子

MyLayout和XIB或SB的混合使用方法

MyLayout是一个可以非常简单和方便的实现各种界面布局的第三方开源库。在我的github项目中大部分DEMO都是通过代码来实现界面布局的,但这并不是表示My...

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

jQuery1.3以上版本"@"的问题

jQuery1.3.2已经发布好一段时间了,近日把原来的项目全部从jQuery1.2.6升级为1.3.2了.但是有一点要注意,1.3版以上的jQuery在根据选...

18310
来自专栏ACM小冰成长之路

HDU-5558-Alice's Classified Message

ACM模版 描述 ? 题解 image.png 参考博客:Gatevin’s blog 代码 #include <iostream> #include <alg...

19710
来自专栏iOS开发笔记

cordova插件- Inappbrowser

添加插件 $ cordova plugin addcordova-plugin-inappbrowser ? 插件的使用 Methods cordova.I...

2674
来自专栏互联网软件技术

评分---五星好评

513

扫码关注云+社区