其他分享
首页 > 其他分享> > Vue-获取地址栏参数

Vue-获取地址栏参数

作者:互联网

// 获取地址栏参数
  getUrl(obj, bool) { // 该方法使用说明在底部
    let urlObj = {}
    let str = location.href
    if (str.indexOf('?') != -1) {
      // 获取地址栏参数
      let num = str.indexOf("?")
      str = str.substr(num + 1)
      let arr = str.split("&")
      arr.forEach(item => {
        let query = item.split("=")
        urlObj[query[0]] = JSON.parse(decodeURI(query[1]))
      })
      // 设置回调值
      if (!obj) {
        return urlObj
      }
      if (typeof(obj) == 'string') { // obj为字符串时,bool表示希望得到的值类型:Number(数字类型)、String(字符串类型),默认 String
        if (bool) {
          return bool(urlObj[obj])
        } else {
          return urlObj[obj]
        }
      } else { // 参数为数组对象,bool表示 是否 仅return传递的参数;true:表示仅 return 传递的参数,false 表示处理传递的参数并返回所有地址栏参数,默认false
        // bool = true/false
        // obj = [{
        //   name: '参数名称'/['', '', ...],
        //   concat: '', // name为数组时,合并name内字段值,新生成的数组名称
        //   type: '希望得到的值类型', Number/String // type可不设置,默认String
        //   delete: true, // 是否忽略该参数而得到地址栏其他参数,默认false
        // }
        // ......
        // ]

        if (bool) { // 仅return传递的参数
          let onlyObj = {}
          obj.forEach(key => {
            if (typeof(key.name) == 'string') { // name为字符串
              if (urlObj[key.name] !== undefined) {
                if (key.type) {
                  onlyObj[key.name] = key.type(urlObj[key.name])
                } else {
                  onlyObj[key.name] = urlObj[key.name]
                }
              }
            } else { // name为数组
              onlyObj[key.concat] = []
              key.name.forEach(item => {
                if (urlObj[item]) {
                  onlyObj[key.concat].push(urlObj[item])
                }
              })
            }
          })
          return onlyObj
        } else { // 非仅return传递的参数
          obj.forEach(key => {
            if (typeof(key.name) == 'string') { // name为string
              if (urlObj[key.name] !== undefined) {
                if (key.type) {
                  urlObj[key.name] = key.type(urlObj[key.name])
                } else {
                  urlObj[key.name] = urlObj[key.name]
                }
                if (key.delete) {
                  delete urlObj[key.name]
                }
              }
            } else { // name为数组
              urlObj[key.concat] = []
              key.name.forEach(item => {
                if (urlObj[item]){
                  if (key.type) {
                    urlObj[key.concat].push(key.type(urlObj[item]))
                  } else {
                    urlObj[key.concat].push(urlObj[item])
                  }
                }
              })
            }
          })
          return urlObj
        }
      }
    } else {
      if (typeof(obj) == 'string') {
        return ''
      } else {
        return {}
      }
    }
  }
// ————————————————————————————————————————————————————————————————————使用说明 getUrl(obj, bool) {} 获取地址栏参数 (示例地址栏:http://office.youxiake.com/v2/card/order?id=1&status=2) 1-1、当什么都不传时,return地址栏所有参数 示例: commonJs.getUrl('id') // {id: '1', status: '2'} 1-2、当 obj='' 字符串时,bool: 表示希望得到的值类型:Number/String,默认String 示例: commonJs.getUrl('id') // '1' commonJs.getUrl('id', Number) // 1 1-3、当obj=[{}]数组对象时,bool表示 是否 仅return传递的参数;true:表示仅 return 传递的参数,false 表示处理传递的参数并返回所有地址栏参数,默认false obj = [{ name: '参数名称' / ['参数名称',...], // 参数名称,name为数组时会合并name内的值并生成新的数组(必传) concat: '', // name为数组时,合并name内字段值,新生成的数组名称(非必传) type: '', // 希望得到的该值类型:Number/String,默认 String(非必传) delete: true, // 是否忽略该参数而得到地址栏其他参数,默认false(非必传) } ...... ] 示例:commonJs.getUrl([{name: 'id'}], true) // {id: '1'} commonJs.getUrl([{name: 'id', type: Number}], true) // {id: 1} commonJs.getUrl([{name: 'id', type: Number}]) // {id: 1, status: '2'} commonJs.getUrl([{name: ['id', 'status'], concat: 'concatName', type: Number}]) // {concatName: [1, 2]}

 

标签:Vue,return,name,参数,obj,key,urlObj,地址栏
来源: https://www.cnblogs.com/WebMadman/p/14066450.html