qs.js解決傳參為空,null,undefinde問題
阿新 • • 發佈:2018-11-26
qs.js去除引數為空的引數
vue的後臺管理專案匯出功能按搜尋條件傳參匯出,但是後臺比接受值為null,空,undefined的值。直接上程式碼
let obj={
"isAppointment" :this.isAppointment,
"id":this.selectorBehindObj.orderNumber, //工單號
"thirdOrderId":this.selectorBehindObj.thirdOrderId, //渠道商訂單號
"userPhoneNum":this .selectorBehindObj.userPhoneNum, //下訂單繫結手機號碼
"linkmanPhoneNum":this.selectorBehindObj.orderTel, //下訂單聯絡人手機號碼
"linkmanCityId":this.selectorBehindObj.cityId, //城市
"linkmanAreaId":this.selectorBehindObj.areaId, //區域
"appointmentDatetime":this.selectorBehindObj.makeTime, //預約時間
"createTime":this.selectorBehindObj.placeTime, // 下單時間
"state":this.selectorBehindObj.orderStatus, //工單狀態
"officialPartnerId":this.channelID, //主渠道ID
'officialPartnerSubsetId':this.officialPartnerSubsetId, //子渠道ID
"appointmentDatetimeStartStr" :this.statisticsDateStartStr, //預約開始時間
"appointmentDatetimeEndStr":this.statisticsDateEndStr, //預約結束時間
"createTimeStartStr":this.statisticsDateStartStr2, //下單開始時間
"createTimeEndStr":this.statisticsDateEndStr2, //下單結束時間
'fLabelBusiness':this.selectorBehindObj.labelId, //工單分類
"type":this.orderName, // 工單型別
"linkmanName":this.phoneName, // 聯絡人
"masterName":this.masterName, // 工程師姓名
"masterPhoneNum":this.masterPhone, // 工程師手機
"completedTimeStartStr": this.completedTimeStartStr, // 完成開始時間
"completedTimeEndStr": this.completedTimeEndStr,// 完成結束時間
"channelWarranty":this.selectQuality , // 質保
"source":this.numId1, // 工單來源
"siteId":this.siteID, // 網點名稱
}
上訴程式碼中是後臺搜尋條件必須要的引數,但是匯出又不接受null,空,unedfinde等值。
npm install qs -S
在main.js中全域性引入
import qs from “qs”
Vue.prototype.$Qs = qs; 繫結在vue的原型上
在需要的頁面用到首先排除為空的值qs可以把為null的去掉,所以為空的全部變為null,
for(let key in obj){ if(!obj[key]){ obj[key] = null; } }
匯出的路徑介面視窗另外開啟下載
let strUrl = `${this.$reportdomain}/order/download?`; let data = strUrl+this.$Qs.stringify(obj,{skipNulls:true}); window.open(data, 'newwindow', 'top=0, left=0, toolbar=yes, menubar=yes, scrollbars=yes, resizable=yes, location=yes, status=yes')
qs.js的NULL值處理
預設地,Null值會被解析為空字串:
var withNull = qs.stringify({ a: null, b: '' }); //'a=&b='
解析器不區分引數是否含有等號或者不含都會轉換為空:
qs.parse('a&b='); //{ a: '', b: '' }
在字串化的時候,可以使用strictNullHandling選項來區分Null值和空,輸出結果中Null值將不會含有等號:
qs.stringify({ a: null, b: '' }, { strictNullHandling: true })//'a&b='
如果要將沒有等號的字串值解析為Null的話,也可以使用strictNullHandling選項:
qs.parse('a&b=', { strictNullHandling: true }) //{ a: null, b: '' }
skipNulls選項可以忽略Null值的解析:
qs.stringify({ a: 'b', c: null}, { skipNulls: true }) //'a=b'