//路由跳转 若不选择跳转方式,则会自动顺序选择 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格式错误')
}
})
}
使用结果: