【Vue进阶】Vue项目需要从URL中获取参数

前言

问题描述: Vue项目需要从URL中获取参数,用了location.search,然后没找到数据(为空)。


一、Location扫盲

1)、Location 对象属性

属性描述
hashURL的锚部分(从#号开始的URL)
hostURL的主机名和端口号
hostnameURL的主机名
href完整的URL
pathnameURL的路径名
portURL的端口号
protocolURL的协议
searchURL的查询部分(从?号开始的URL)

二、获取URL参数

1)、获取参数代码

	/**
     * 格式化URL地址参数
     * @param {*} data 数据源(格式如下)
     * @returns 格式化数据
     */
    formatURLData (data) {
      const tempArray = data.split('?')
      const searchQuery = tempArray[1]
      if (!searchQuery || typeof searchQuery !== 'string') return
      const result = {}
      searchQuery.split('&').forEach(item => {
        const tmp = item.split('=')
        result[tmp[0]] = tmp[1]
      })
      return result
    },
    // 获取URL参数
    getURLParams(){
      console.log('$route.query:', this.$route.query)
      const data = this.formatURLData(location.search)
      console.log('hash:', location.hash)
      console.log('search:', location.search, location.search && data)
    }

2)、测试结果

URL(示例1):

http://localhost:8080/front_end/#/customer?name=test&phone=13200010002

query可以正常拿到参数:query在hash后面,可通过this.$route.query获取到。
在这里插入图片描述

URL(示例2):

http://localhost:8080/front_end?name=test&phone=13200010002#/customer

search可以正常拿到参数:因为查询字符串search只能在取到“?”后面和“#”之前的内容,如果“#”之前没有“?”search取值为空。

在这里插入图片描述

结论:

  1. location依据是协议://ip:端口/?xxx=xxx&xxx=xxx#hash这种顺序判断,search在hash前面,#后的内容为hash。
  2. query在hash后面

3)、兼容性写法

可以取query或search中参数有值的数据即可。

    // 获取URL参数
    getURLParams(){
      console.log('$route.query:', this.$route.query)
      const query = this.$route.query
      const data = this.formatURLData(location.search)
      console.log('hash:', location.hash)
      console.log('search:', location.search, location.search && data)
      const name= (query && query.name) || (data && data.name)
      console.log('params.name:', name)
    }

总结

【Vue进阶】系列文章持续更新中……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值