前言
Uniapp在URL中的参数会存在于两种位置,如下:
http://localhost:8080/unipp?id=399#/pages/index/index?name=eagle
当我们在页面跳转时,可以通过onLoad(option)获取到#后面的传参,而前面的参数是无法获取的。
onLoad(option){
if (option && option.name) {
console.log('name', name) // name eagle
}
if (option && option.id) {
console.log('id', id) // 控制台不会输出
}
}
URL地址栏获取指定参数函数封装
该方法可满足上述两个位置的参数获取,优先从#之前的部分匹配指定的参数,若没有再匹配#后面的部分。
该方法对于参数尾部带有两个==,以及一些未知情况,可能会造成掉参现象。
示例:getUrlValue(‘id’) getUrlValue(name’)
getUrlValue(value) {
// 从第一个?开始,且不包括#之后,并截取掉?的部分
var query = location.search.substring(1);
// 从#开始的部分,并转换成数组
var hash = location.hash.split("?");
// query和hash均没有参数
if (!query && hash.length < 2) {
return ''
}
// 先取query部分的参数进行匹配
var vars = query.split("&")
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=")
if (pair[0] == value) {
return pair[1]
}
}
// query没有参数,或者有参数但没找到,则取hash部分的参数
if (!hash[1]) {
return ''
}
vars = hash[1].split("&")
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=")
if (pair[0] == value) {
return pair[1]
}
}
return ''
},