小程序封装路由文件和路由方法(5种全解析)


Posted in Javascript onMay 26, 2019

小程序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

github,如果帮到了你,就给一颗star吧

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ext 同步和异步示例代码
Sep 18 Javascript
jquery清空表单数据示例分享
Feb 13 Javascript
Highcharts使用简例及异步动态读取数据
Dec 30 Javascript
jQuery实现TAB选项卡切换特效简单演示
Mar 04 Javascript
js完整倒计时代码分享
Sep 18 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
Dec 19 Javascript
通过js修改input、select默认字体颜色
Apr 19 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
Apr 21 Javascript
JavaScript输入框字数实时统计更新
Jun 17 Javascript
vue中使用rem布局代码详解
Oct 30 Javascript
JavaScript进阶(三)闭包原理与用法详解
May 09 Javascript
node脚手架搭建服务器实现token验证的方法
Jan 20 Javascript
vue2.0 实现富文本编辑器功能
May 26 #Javascript
富文本编辑器vue2-editor实现全屏功能
May 26 #Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
May 26 #Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
May 26 #Javascript
vue指令做滚动加载和监听等
May 26 #Javascript
vxe-table vue table 表格组件功能
May 26 #Javascript
使用Vue.observable()进行状态管理的实例代码详解
May 26 #Javascript
You might like
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
总结对比php中的多种序列化
2016/08/28 PHP
PHP实现的日历功能示例
2018/09/01 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
javascript 流畅动画实现原理
2009/09/08 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
Python中音频处理库pydub的使用教程
2017/06/07 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
python爬虫增加访问量的方法
2019/08/22 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
django使用channels实现通信的示例
2020/10/19 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
婴儿地球:Baby Earth
2018/12/25 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
门卫岗位职责
2013/11/15 职场文书
2014年迎新年联欢会活动策划方案
2014/02/26 职场文书
继承公证书
2014/04/09 职场文书
公司承诺书怎么写
2014/05/24 职场文书
法律意见书范本
2015/06/04 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书