Vue 去除query里的指定参数 包含无刷新更新页面参数

4 篇文章 0 订阅
这篇博客介绍了如何在Vue中操作路由查询参数,包括移除指定参数和无刷新删除URL中的参数。提供了两个实用函数,editRouteQuery用于更新路由query,editUrl用于删除URL指定搜索参数。此外,还展示了从URL中获取指定参数的方法。
摘要由CSDN通过智能技术生成

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]

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值