1

这里封装一种方法,在Page构造函数上将扫码参数合并到options上,这样就不需要每个页面都去处理一下参数,减少冗余代码增加代码可读性和扩展性。

// 写在 app.js App构造函数之前
// 微信小程序
const originalPage = Page 
Page = function (app) {
  let onload = app.onLoad
  app.onLoad = function(options) {
      if (options.q) {
          let query = initParm(decodeURIComponent(options.q))
          for(let item in query) {
              options[item] = query[item]
          }
      }
      onload.call(this, options)
  }
  return originalPage(app)
}
// 支付宝小程序
const originalPage = Page 
Page = function (app) {
  let onload = app.onLoad
  app.onLoad = function(options) {
    const qrCode = getApp().globalData.query ? getApp().globalData.query.qrCode : undefined
      if (qrCode) {
          let query = initParm(qrCode)
          for(let item in query) {
              options[item] = query[item]
          }
      }
      onload.call(this, options)
  }
  return originalPage(app)
}

// 工具函数
function initParm(parm) {
  let queryStr = parm.split("?")[1]
  let queryObj = {}
  let result = ''
  if(queryStr) {
    if(queryStr.indexOf('&') >= 0) {
      let query = queryStr.split('&')
      for(let i = 0; i < query.length; i++) {
        result = query[i].split('=')
        queryObj[result[0]] =  result[1]
      }
    } else {
      result = queryStr.split('=')
      queryObj[result[0]] =  result[1]
    }
  }
  return queryObj
}

海洋饼干
1.5k 声望191 粉丝