问题
大家在使用vue框架的时候,有没有遇到过这个问题,就是h5连接地址上有多个同名参数,通过router.query获取的字段值就会转变为数组,这是因为vue-router的参数解析支持两种格式string或数组,
如果我们只需要单一的字符串,那我们怎么解决呢
解决方案
两种方案,一个是针对单一的参数进行解析,另一个是针对所有的进行统一拦截
现说第一种:
// 解析参数,获取最后一个
const search = window.location.search
const queries = search.substr(1)
const list = queries.split("&")
const result = {}
list.forEach((el)=>{
const item = list.split("=")
result[item[0]] = decodeURIComponent(item[1])
})
return result
通用方案(也是比较彻底的一种方案)
import qs from "querystring"
const router = new VueRouter({
routes:[],
parseQuery: function(options){ // 重构
const routeQueries = qs.parse(options);
const queryParams = {};
for (let key in routeQueries) {
if (Array.isArray(routeQueries[key])) {
queryParams[key] = routeQueries[key].pop();
} else {
queryParams[key] = routeQueries[key];
}
}
return queryParams;
}
});
至此,问题解决