小程序封装路由文件和路由方法(5种全解析)
程序员文章站
2023-12-20 10:56:28
小程序5种路由方法使用场景,封装路由文件和路由方法,提升小程序体验和开发效率
明确要解决的问题
每次使用路由时,总是粘贴复制路径,这样在路径有修改时,需要修...
小程序5种路由方法使用场景,封装路由文件和路由方法,提升小程序体验和开发效率
明确要解决的问题
- 每次使用路由时,总是粘贴复制路径,这样在路径有修改时,需要修改所有用到该路径的地方,维护成本高
- 路由跳转时拼接参数让人头大,业务复杂时要拼接十几个参数
- 路由返回,只会返回一层,不能直接返回到目标页面,因为不知道目标页面是否在路由栈中,也不知道在第几层
这些问题都可以通过封装路由文件和路由方法解决,提供开发效率,减少bug,省下来的时间可以多陪陪女朋友
封装路由文件,对路由进行统一管理
在根目录创建router.js
// 这是路由管理页面,在此统一配置路由 export default { 'index':'/index/index', // 首页 'list':'/list/list', // list页面 'top':'/top/top', // top页面 }
解决了第一个问题
封装路由方法
路由方法有五个,常用的有三个switchtab、navigateto、navigateback
简单介绍一下这五个方法及使用场景
- switchtab,跳转tabbar页面专用,其他页面出栈,新页面入栈
- navigateto最常用的路由跳转,会加入到页面栈,允许返回,也就是新页面不断入栈
- navigateback返回,只能返回到页面栈中存在的页面,页面不断出栈,直到到达目标页
- redirectto关闭当前页面,跳转某个页面,当前页面不会加入到页面栈,也就是说当前页面不能通过返回到达,比如付款页面,付款完成后,最好不要再让用户返回到付款页,再比如一些无法修改的操作,比如删除商品,商品删除后再通过navigateback返回再删除一次商品,体验肯定不好,表现为当前页面出栈,新页面入栈
- relaunch关闭所有页面,打开某个页面,可以打开任意页面包括tabbar,适合强制完成某个操作的页面,比如登录页,当已登录的用户点击退出后,进入登录页,那么就不能通过返回再回去了,就必须留下来登录或注册,适合用这个,表现为所有页面出栈,新页面入栈
开始封装,在根目录创建utils.js
// 封装路由方法 export default { /** * function * @param {string} url 目标页面的路由 * @param {object} param 传递给目标页面的参数 * @description 处理目标页面的参数,转成json字符串传递给param字段,在目标页面通过json.parse(options.param)接收 */ navigateto(url,param={}){ if(param){ url+=`?param=${json.stringify(param)}` } wx.navigateto({ url:url, fail(err) { console.log('navigateto跳转出错',err) }, }) }, /** * function * @param {string} url 目标页面的路由 * @param {object} param 传递给目标页面的参数,只有页面栈无目标页面调用navigateto时,参数才会生效,单单返回不能设置参数 * @description 先取出页面栈,页面栈最多十层,判断目标页面是否在页面栈中,如果在,则通过目标页的位置,返回到目标页面,否则调用navigateto方法跳转到目标页 */ navigateback(url,param={}){ const pageslist = getcurrentpages() let index = pageslist.findindex(e=>{ return url.indexof(e.route)>=0 }) if(index == -1){ // 没有在页面栈中,可以调用navigateto方法 this.navigateto(url,param) }else{ wx.navigateback({ delta: pageslist.length-1-index, fail(err){ console.log('navigateback返回出错',err) } }) } }, switchtab(url){ // 封装switchtab,switchtab不能有参数 wx.switchtab({ url:url }) }, redirectto(url,param={}){ // 封装redirectto,和navigateto没啥区别 if(param){ url+=`?param=${json.stringify(param)}` } wx.redirectto({ url:url, fail(err) { console.log('redirectto跳转出错',err) }, }) }, relaunch(url,param={}){ // 封装relaunch,和navigateto没啥区别 if(param){ url+=`?param=${json.stringify(param)}`要根据具体业务来,该返回就返回,该跳转就用跳转,不能一直跳转! } wx.relaunch({ url:url, fail(err) { console.log('relaunch跳转出错',err) }, }) } }
以上对参数的封装解决了第二个问题,对navigateback的封装解决了第三个问题
总结
小程序的路由跳转有很多方法,但具体场景下合适的只有一个,选择合适的路由跳转方式会提高用户体验,封装主要是提升开发效率,减少后期维护成本
小程序代码片段地址 https://developers.weixin.qq.com/s/csojwdmr7b8n
,如果帮到了你,就给一颗star吧
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。