支付寶小程序?qū)崿F(xiàn)省市區(qū)三級聯(lián)動
本文實例為大家分享了支付寶小程序?qū)崿F(xiàn)省市區(qū)三級聯(lián)動的具體代碼,供大家參考,具體內(nèi)容如下
背景
最近做的項目 有省市區(qū)聯(lián)動。不僅要傳name還要把對應(yīng)的id發(fā)給后臺。
支付寶提供的級聯(lián)有 my.multiLevelSelect 和picker并不能滿足需求。
picker 組件不支持多列選擇,所以使用 picker-view 組件和Popup配合使用。
實現(xiàn)效果圖


數(shù)據(jù)結(jié)構(gòu)
citys - 城市 areas - 區(qū)
當(dāng)然這是處理之后的,行政區(qū)劃樹 不長這樣子。
[{
code:1,
name:'北京',
areas:[
{
code: 101,
name:'朝陽區(qū)'
},
{
code: 101,
name:'豐臺區(qū)'
}
]
},{
code:2,
name:'河北省',
citys:[
{
code: 20,
name:'石家莊市',
areas:[{
code:'201',
name:'長安區(qū)'
}]
}
]
}]
詳細(xì)實現(xiàn) 僅供參考
//ahtml
<popup show="{{showBottom}}" position="bottom" onClose="onPopupClose" className="cityPop">
<view class="flex">
<view onTap="onPopupClose">取消</view>
<view onTap="bindMultiPickerChange" class="confrim">確定</view>
</view>
<view>
<picker-view value="{{multiIndex}}" onChange="bindMultiPickerColumnChange" class="mypicker">
<block a:for="{{multiArray}}">
<picker-view-column key="{{index}}">
<block a:for="{{item}}" a:for-item="colItem">
<view key="{{colItem.code}}">{{colItem.name}}</view>
</block>
</picker-view-column>
</block>
</view>
</popup>
// 滾動選擇
bindMultiPickerColumnChange(e) {
// 注意處理直轄市自治區(qū)(nodeType =2 -- citys(null) areas(Array))與其他省份(nodeType=1 -- citys(Array) areas(Array))
let newColums = e.detail.value;
let {
multiIndex
} = this.data;
let newMultiIndex=[]
if(multiIndex[0]!=newColums[0]) {
newMultiIndex=[newColums[0], 0, 0]
}else {
newMultiIndex=[multiIndex[0], newColums[1],newColums[2]|| 0]
};
console.log('修改的列為', newMultiIndex);
var data = {
multiArray: this.data.multiArray,
multiIndex: newMultiIndex
};
var data.multiArray[0] = this.data.provinces;
if ((temp[data.multiIndex[0]].citys) && (temp[data.multiIndex[0]].citys).length > 0) {
//如果第二列“市”的個數(shù)大于0,通過multiIndex變更multiArray[1]的值
data.multiArray[1] = temp[data.multiIndex[0]].citys || [];
var areaArr = (temp[data.multiIndex[0]].citys[data.multiIndex[1]]) && (temp[data.multiIndex[0]].citys[data.multiIndex[1]]).areas || [];
//如果第三列“區(qū)”的個數(shù)大于0,通過multiIndex變更multiArray[2]的值;否則賦值為空數(shù)組
data.multiArray[2] = areaArr.length > 0 ? areaArr : [];
} else {
//如果第二列“市”的個數(shù)不大于0,那么第二列“市”和第三列“區(qū)”都賦值為空數(shù)組
//直轄市citys = null,直接賦值areas
data.multiArray[1] = [];
data.multiArray[2] = temp[data.multiIndex[0]].areas || [];
}
this.setData({
multiArray: data.multiArray,
multiIndex: data.multiIndex,
});
}
// 點(diǎn)擊確定時 修改顯示
bindMultiPickerChange: function(e) {
let {
multiArray,multiIndex
} = this.data;
let provinceName,
cityName,
districtName,
provinceId,
cityId,
districtId;
provinceName = multiArray[0][multiIndex[0]].name;
cityName = multiArray[1].length > 0 ? multiArray[1][multiIndex[1]].name : '';
districtName = multiArray[2].length > 0 ? multiArray[2][multiIndex[2]].name : '';
provinceId = multiArray[0][multiIndex[0]].code;
cityId = multiArray[1].length > 0 ? multiArray[1][multiIndex[1]].code : '';
districtId = multiArray[2].length > 0 ? multiArray[2][multiIndex[2]].code : '';
this.setData({
provinceName,
cityName,
districtName,
provinceId,
cityId,
districtId,
region: provinceName + cityName + districtName,
showBottom:false
})
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實現(xiàn)隨機(jī)五位數(shù)驗證碼
這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)隨機(jī)五位數(shù)驗證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09
momentjs實現(xiàn)DatePicker時間禁用的項目實踐
momentjs是一個處理時間的js庫,簡潔易用,本文來介紹一下momentjs實現(xiàn)DatePicker時間禁用,具有一定的參考價值,感興趣的可以了解一下2023-09-09
layuiAdmin循環(huán)遍歷展示商品圖片列表的方法
今天小編就為大家分享一篇layuiAdmin循環(huán)遍歷展示商品圖片列表的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
微信小程序云開發(fā)實現(xiàn)微信支付功能業(yè)務(wù)邏輯可靠
這篇文章主要介紹了微信小程序云開發(fā)實現(xiàn)微信支付功能,云開發(fā)來開發(fā)微信小程序時,如何實現(xiàn)微信支付,并且保證業(yè)務(wù)邏輯可靠,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-05-05

