Vue 去除query里的指定参数
一 新建editRouteQuery.js文件
//共接收2个参数 route对象,参数对象 参数值需为null
export const editRouteQuery = (route, query = null) => {
const _old = route.query
let _new = query
if (query) {
_new = Object.assign({}, _old, query)
}
for (let key in _new) {
if (!_new[key]) {
delete _new[key]
}
}
return {
...route,
query: _new,
}
}
二 用法
this.$router.replace(editRouteQuery(this.$route, { name: null }))
2 无刷新去除url参数
/**
* 删除URL中指定search参数,会将参数值一起删除
* @param {string} url 地址字符串
* @param {array} aParam 要删除的参数key数组,如['name','age']
* @return {string} 返回新URL字符串
*/
export const editUrl = (url,aParam) =>{
aParam.forEach(item => {
const fromindex = url.indexOf(`${item}=`) //必须加=号,避免参数值中包含item字符串
if (fromindex !== -1) {
// 通过url特殊符号,计算出=号后面的的字符数,用于生成replace正则
const startIndex = url.indexOf('=', fromindex)
const endIndex = url.indexOf('&', fromindex)
const hashIndex = url.indexOf('#', fromindex)
let reg;
if (endIndex !== -1) { // 后面还有search参数的情况
const num = endIndex - startIndex
reg = new RegExp(`${item}=.{${num}}`)
url = url.replace(reg, '')
} else if (hashIndex !== -1) { // 有hash参数的情况
const num = hashIndex - startIndex - 1
reg = new RegExp(`&?${item}=.{${num}}`)
url = url.replace(reg, '')
} else { // search参数在最后或只有一个参数的情况
reg = new RegExp(`&?${item}=.+`)
url = url.replace(reg, '')
}
}
});
const noSearchParam = url.indexOf('=')
if( noSearchParam === -1 ){
url = url.replace(/\?/, '') // 如果已经没有参数,删除?号
}
return url
}
//用法
window.history.replaceState('', '', editUrl(this.$route.fullPath,['mode','pay']));
**url获取指定参数**
```typescript
const url = 'https://www.baidu.com/edit?id=123&name=1'
const code = res.resultStr.split('?')[1].match(/(^|&)qrcodeNo=([^&]*)/)[2]