小程序路由跳转封装 若跳转tab页 需解析路径url中携带的参数

//路由跳转 若不选择跳转方式,则会自动顺序选择 navigateTo switchTab mini
function wxLinkTo(url, type = '') {
    
    
  switch (type) {
    
    
    case "switchTab":
      wx.switchTab({
    
    url})
      break
    case "reLaunch":
      wx.reLaunch({
    
    url})
      break
    case "redirectTo":
      wx.redirectTo({
    
    url})
      break
    case "navigateTo":
      wx.navigateTo({
    
    url})
      break
    default:
      wx.navigateTo({
    
    
        url,
        fail: () => {
    
    
          wx.switchTab({
    
    
            url,
            fail: () => {
    
    
              // 判断是否是跳转其他小程序
              wxToMini(url)
            },
            success: () => {
    
    
              setTabParams(url)
            }
          })
        }
      })
  }
}

/**
 * 如果是跳转tab页,需要处理tab页参数
 */
function setTabParams(url) {
    
    
  if (url.indexOf('?') > -1) {
    
    
    let paramStr = url.split('?')[1]
    let paramsArr = paramStr.split('&')
    let params = paramsArr.reduce((obj, item) => {
    
    
      if (item.indexOf('=') > -1) {
    
    
        let [key, value] = item.split('=')
        obj[key] = value
      }
      return obj
    }, {
    
    })
    if (params && JSON.stringify(params) !== '{}') {
    
    
      try {
    
    
        wx.setStorageSync('tabParams', params)
      } catch (e) {
    
    
        console.log(e);
      }
    } else {
    
    
      try {
    
    
        wx.removeStorageSync('tabParams')
      } catch (e) {
    
    
        console.log(e);
      }
    }
  }
}
/**
 * 获取tab参数
 */
function getTabParams() {
    
    
  try {
    
    
    const obj = wx.getStorageSync('tabParams')
    if (obj) {
    
    
      return obj
    } else {
    
    
      return false
    }
  } catch (e) {
    
    
    return false
  }
}
function wxToMini(appId, path = '', extraData = {
    
    }, envVersion = 'release') {
    
    
  return new Promise((resolve, reject) => {
    
    
    if (/^wx.*$/.test(appId)) {
    
    
      wx.navigateToMiniProgram({
    
    
        appId,
        path,
        extraData,
        envVersion,
        success(res) {
    
    
          resolve(res)
        },
        fail(err) {
    
    
          console.log(err);
          reject(err)
        }
      })
    } else {
    
    
      reject('appId格式错误')
    }
  })
}

使用结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40026668/article/details/107857073