做了15年建站,什么奇葩需求没见过。最近好多新手朋友问我,说小程序页面跳转死活不通,明明代码没写错,就是白屏或者返回上一页。别急,这坑我也踩过,今天不整那些虚头巴脑的官方文档,直接说人话。
先说个真事儿。上个月有个做本地生活的客户,急得团团转。他的小程序里有个“查看订单”按钮,点击后没反应。我一看代码,好家伙,wx.navigateTo 用得飞起,结果目标页面根本没在 app.json 里注册。这种低级错误,新手最容易犯。记住啊,小程序不是网页,它不是想跳哪就跳哪的,必须得“持证上岗”。
咱们聊聊 wx.navigateTo 和 wx.redirectTo 的区别。很多兄弟搞混了。navigateTo 是保留当前页面,跳转到应用内的某个页面。通俗点说,就是多了一个“返回”按钮。而 redirectTo 是关闭当前页面,跳转到应用内的某个页面。这就好比,前者是开了个新窗口,后者是直接换了一个窗口。
如果你发现跳转后,用户点返回键回到了上一页,那大概率是用错了方法。比如你做支付成功页,跳过去后就不想让用户再回去改订单了,这时候必须用 redirectTo。不然用户点返回,又回到支付页,这就尴尬了,逻辑全乱套。
还有个小细节,路径问题。有时候你写的是 /pages/index/index,有时候又是 pages/index/index。千万别带那个斜杠开头,除非你确定你的路径配置没问题。我见过太多人因为一个斜杠,调试半天。其实去掉斜杠,相对路径更稳妥。
再说说参数传递。有时候页面跳转了,但数据没带过去。比如你在列表页点击某个商品,跳到详情页,详情页却显示空白。这时候要检查 query 参数。wx.navigateTo({ url: '/pages/detail/detail?id=123' })。详情页 onLoad 里要接收这个 id。如果没接收,或者接收错了,那就是数据没对上。
还有个坑,就是页面层级。小程序最多允许打开5层页面。如果你一直 navigateTo,第5层之后,再跳转就会失败。这时候就得用 redirectTo 或者 switchTab。switchTab 是跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。这个适合做首页、分类页这种主要入口。
我有个客户,他的商城小程序,用户一直加购,然后跳转结算页。结果因为层级太深,结算页打不开。后来我把中间的列表页都改成了 redirectTo,或者用 switchTab 回到首页再进分类。这样层级就清爽了。
另外,调试的时候,别光看真机。微信开发者工具里的调试器很重要。看看 Network 面板,看看 Console 报错。有时候是 JSON 解析错误,有时候是路径找不到。报错信息通常会告诉你哪里错了,别视而不见。
还有啊,有时候不是代码问题,是缓存问题。特别是开发阶段,改完代码不重新编译,或者真机调试不清除缓存,都会导致现象不一致。记得每次改完路径,都清一下缓存,重新编译。
最后说个心态问题。做小程序,别怕报错。报错是好事,它告诉你哪里不对。我当年刚入行,被一个跳转问题折磨了三天,最后发现是个标点符号写错了,中文逗号当成了英文逗号。这种低级错误,真的让人哭笑不得。
所以,遇到跳转问题,先检查 app.json 配置,再检查路径写法,再检查参数传递,最后检查层级限制。一步步来,别慌。
如果你还是搞不定,或者想优化你的小程序体验,欢迎来聊聊。我不一定帮你改代码,但能给你指条明路。毕竟,少走弯路,就是省钱。
本文关键词:微信小程序页面跳转