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]}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM