微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vue-router接收带+号参数时加号丢失问题

遇到 vue 项目从 url 接收带+号的参数,参数中的加号丢失的处理方法

现象

从另一个项目跳过来,参数开头含有一个+号,但是请求接口时发现参数开头的+号丢了,导致报错。

原因

vue-router 的源码中对参数中的+号进行了处理,替换为了空格:

文件 node_modules/vue-router/src/util/query.js

function parseQuery (query: string): Dictionary<string> {
  const res = {}

  query = query.trim().replace(/^(\?|#|&)/, '')

  if (!query) {
    return res
  }

  query.split('&').forEach(param => {
    const parts = param.replace(/\+/g, ' ').split('=')
    const key = decode(parts.shift())
    const val = parts.length > 0 ? decode(parts.join('=')) : null

    if (res[key] === undefined) {
      res[key] = val
    } else if (Array.isArray(res[key])) {
      res[key].push(val)
    } else {
      res[key] = [res[key], val]
    }
  })

  return res
}

处理办法

在路由的拦截跳转函数 beforeEach增加处理,把空格替换回+号:

if(to.query.id) {
    to.query.id = to.query.id.replace(/\s/g, '+')
}

原文地址:https://cloud.tencent.com/developer/article/1944608

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐