微信小程序 封装路由 mini-router

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序 封装路由 mini-router相关的知识,希望对你有一定的参考价值。

参考技术A 目前mini-router支持微信小程序里的路由的所有方法,函数名对比:

当你输入一个在pages模块中找不到的路由时(log),mini-router会抛出错误,例如:

mini-router内置了一个属性 params ,它会根据你跳转的页面,动态的更换当前属性的值。

参数存储在storage里,你可以通过小程序调试工具看到:

获取参数时,你不必知道它存储在storage里的key是什么,你只要拿 app.$router.params 就可以了

mini-router 通过 back 或者 backHome 函数实现反向传值(反向携带参数)

当你选择不携带参数返回时,在首页你将拿不到 app.$router.params ,因为 mini-router 会把 params 软删除,如果你需要的话,你还是可以从storage里拿到它。

mini-router同小程序一样,提供三种状态 success , fail , complete
不同于小程序,mini-router使用链式调用来处理这三种状态,

上面的都是通过params传参,传的参数缓存在了storage里,新增加的query类型传参,将参数拼接到了url后面:

Github: https://github.com/hellolad/mini-router

微信小程序之网络请求简单封装

在微信小程序中实现网络请求相对于Android来说感觉简单很多,我们只需要使用其提供的API就可以解决网络请求问题。
- 普通HTTPS请求(wx.request)
- 上传文件(wx.uploadFile)
- 下载文件(wx.downloadFile)
- WebSocket通信(wx.connectSocket)

为了数据安全,微信小程序网络请求只支持https,当然各个参数的含义就不在细说,不熟悉的话可以;可以去阅读官方文档的网络请求api,当我们使用request时header的content-typ默认是application/json,在文档中指出method 的value必须是大写,不过经过测试,小写也能请求成功。request默认的超时时间是60s,如果我们想自定义超时时间,我们可以在app.json中加入下面代码片段,分别设置request,socket,和上传文件及下载文件的超时时间。

  "networkTimeout": 
    "request": 5000,
    "connectSocket": 5000,
    "uploadFile": 5000,
    "downloadFile": 5000
  

设置过超时时间,我们就开始封装网络请求,平时我们所接触的网络请求,一般会分为两类,一类是在后台运行的,没有加载对话框提示,另一种就是有提示,如提示正在加载数据,,那么我们就以此为线索来进行封装。先创建一个network的网络请求工具类,然后

// 展示进度条的网络请求
// url:网络请求的url
// params:请求参数
// message:进度条的提示信息
// success:成功的回调函数
// fail:失败的回调
function requestLoading(url, params, message, success, fail) 
  console.log(params)
    wx.showLoading(
      title: message,
    )
  wx.request(
    url: url,
    data: params,
    header: 
      'content-type': 'application/x-www-form-urlencoded'
    ,
    method: 'post',
    success: function (res) 
      //console.log(res.data)
        wx.hideLoading()
      if (res.statusCode == 200) 
        success(res.data)
       else 
        fail()
      

    ,
    fail: function (res) 
        wx.hideLoading()
        fail()
    ,
    complete: function (res) 

    ,
  )

上面函数很好理解,参数的含义已在代码中解释,在网络请求开始前,先展示Loading对话框,提示用户当前网络正在请求数据,当网络请求成功或者失败后调用wx.hideLoading()取消提示框的展示。在api中还提供了wx.showNavigationBarLoading()用于显示当前页面的导航条加载动画,那么如果我们想展示这个动画可以在requestLoading执行开始调用wx.showNavigationBarLoading(),然后在网络请求成功或者失败后调用wx.hideNavigationBarLoading()隐藏导航栏加载动画。

当网络请求成功并且状态码为200时,将请求到的数据回调通过su
ccess(res.data)回调给我们的方法,在上面我们没有对失败原因进行细分,当然你也可以给失败回调加个参数,用于提示用户失败的原因,如
res.statusCode ==500时提示服务器内部错误,res.statusCode ==-1时提示请检查网络,res.statusCode ==404,找不到地址等等。
然后我们在创建一个不显示对话框,用户后台请求数据的请求函数,为了少写代码,我们共用上面的函数,如下

//不显示对话框的请求
function request(url, params, success, fail) 
  this.requestLoading(url, params, "", success, fail)

我们看到我们最终还是调用的requestLoading,那么我们可以在该函数作下判断,如果提示信息message==”就不显示对话框。
最终的代码

function request(url, params, success, fail) 
  this.requestLoading(url, params, "", success, fail)

// 展示进度条的网络请求
// url:网络请求的url
// params:请求参数
// message:进度条的提示信息
// success:成功的回调函数
// fail:失败的回调
function requestLoading(url, params, message, success, fail) 
  console.log(params)
  wx.showNavigationBarLoading()
  if (message != "") 
    wx.showLoading(
      title: message,
    )
  
  wx.request(
    url: url,
    data: params,
    header: 
      //'Content-Type': 'application/json'
      'content-type': 'application/x-www-form-urlencoded'
    ,
    method: 'post',
    success: function (res) 
      //console.log(res.data)
      wx.hideNavigationBarLoading()
      if (message != "") 
        wx.hideLoading()
      
      if (res.statusCode == 200) 
        success(res.data)
       else 
        fail()
      

    ,
    fail: function (res) 
      wx.hideNavigationBarLoading()
      if (message != "") 
        wx.hideLoading()
      
      fail()
    ,
    complete: function (res) 

    ,
  )

module.exports = 
  request: request,
  requestLoading: requestLoading

使用就很简单了,如下

//路径根据自己项目路径修改
var network = require("/utils/network.js")
getData:function()
    network.requestLoading(URL.MY_SCORE, that.data.params, '正在加载数据', function (res) 
    //res就是我们请求接口返回的数据
      console.log(res)
    , function () 
      wx.showToast(
        title: '加载数据失败',
      )
    )

以上是关于微信小程序 封装路由 mini-router的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序游戏在电脑上显示路由号失败

微信小程序封装H5使用web-view源码

微信小程序日期插件封装-年月日时,只可选当前时间之后时间

微信小程序uniapp封装多列选择器组件

h5微信支付功能封装

微信小程序开发系列 (四) :微信小程序的页面跳转路由设计