mpvue微信小程序多列選擇器用法之省份城市選擇的實(shí)現(xiàn)
前言
微信小程序默認(rèn)給我們提供了一個(gè)省市區(qū)的picker選擇器,只需將mode設(shè)置為region即可
<picker
mode="region"
bindchange="bindRegionChange"
value="{{region}}"
custom-item="{{customItem}}"
>
因?yàn)樾〕绦蚰J(rèn)提供的省市區(qū)選擇器只能保存名稱,不能保存id,而且我也不需要選擇三級(jí)城市,所以這里打算通過mode="multiSelector"來實(shí)現(xiàn)省份城市的選擇
城市數(shù)據(jù)json格式
關(guān)于省份城市數(shù)據(jù)的獲取,這里我通過接口去獲取數(shù)據(jù),返回的json格式為
{
"code": 0,
"msg": "success",
"data": [
{
"id": 2,
"name": "北京",
"children": [
{
"id": 36,
"name": "北京市"
}
]
}
]
}
在我們保存提交的時(shí)候只需要保存省份和城市的id即可
picker多列選擇器的用法
<picker
mode="multiSelector"
@change="bindCityChange"
@columnchange="bindCityColumnChange"
:value="multiIndex"
:range="multiArray"
range-key="name"
>
<view class="picker">選擇城市{{userInfo.province.name}},{{userInfo.city.name}}</view>
</picker>
設(shè)置picker mode屬性為multiSelector
mode="multiSelector"
1、這里需要注意的是,在mpvue中無法直接使用bindchange和bindcolumnchange,而是使用@change和@columnchange這種方式
2、value是一個(gè)數(shù)組,例如我們有兩列
[["北京", "湖南"], ["長(zhǎng)沙", "永州"]]
3、range也是一個(gè)數(shù)組,指定的是value值的選中索引值,下標(biāo)從0開始,如[0,0]
4、如果我們的數(shù)據(jù)是一個(gè)二維對(duì)象數(shù)組,我們可以通過使用range-key來指定Object 中 key 的值作為選擇器顯示內(nèi)容
5、當(dāng)我們確認(rèn)選中之后會(huì)觸發(fā)@change事件
// 城市選擇 獲取選中的值 [0,0] 這里需要注意的是獲取值的方式在mpvue中通過e.mp.detail.value而不是e.detail.value
bindCityChange(e) {
// 選中的值索引
console.log(e.mp.detail.value[0], e.mp.detail.value[1]);
// 選中的省份和城市數(shù)據(jù)
console.log(
this.multiArray[0][e.mp.detail.value[0]],
this.multiArray[1][e.mp.detail.value[1]]
);
this.userInfo.province = this.multiArray[0][e.mp.detail.value[0]];
this.userInfo.city = this.multiArray[1][e.mp.detail.value[1]];
},
6、在我們滾動(dòng)每一列的值的時(shí)候會(huì)觸發(fā)@columnchange事件
7、通過e.mp.detail.column和e.mp.detail.value可以獲取到修改列對(duì)應(yīng)的值
console.log( "修改的列為", e.mp.detail.column, ",值為", e.mp.detail.value );
通過獲取到修改的數(shù)據(jù)更新multiIndex的值
// 監(jiān)聽滾動(dòng)事件 滾動(dòng)第一列 修改第二列數(shù)據(jù)
bindCityColumnChange(e) {
// 更新multiIndex的值
this.multiIndex[e.mp.detail.column] = e.mp.detail.value;
//加載對(duì)應(yīng)省份下城市數(shù)據(jù)
switch (e.mp.detail.column) {
case 0:
// this.multiArray[1] = this.cityList[e.mp.detail.value].children;
this.multiArray = [
this.cityList,
this.cityList[e.mp.detail.value].children
];
break;
}
},
data() {
return {
multiIndex: [0, 0],
multiArray: [],
}
}
參考閱讀
- http://www.dhdzp.com/article/121309.htm
- https://developers.weixin.qq.com/miniprogram/dev/component/picker.html
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
javascript下查找父節(jié)點(diǎn)的簡(jiǎn)單方法
javascript下查找父節(jié)點(diǎn)的簡(jiǎn)單方法...2007-08-08
JS拖動(dòng)鼠標(biāo)畫出方框?qū)崿F(xiàn)鼠標(biāo)選區(qū)的方法
這篇文章主要介紹了JS拖動(dòng)鼠標(biāo)畫出方框?qū)崿F(xiàn)鼠標(biāo)選區(qū)的方法,涉及javascript鼠標(biāo)事件及頁面元素樣式的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
js實(shí)現(xiàn)網(wǎng)頁圖片延時(shí)加載 提升網(wǎng)頁打開速度
這篇文章主要為大家介紹了js實(shí)現(xiàn)網(wǎng)頁圖片延時(shí)加載,提升網(wǎng)頁打開速度,感興趣的小伙伴們可以參考一下2016-01-01
js簡(jiǎn)單實(shí)現(xiàn)圖片延遲加載的方法
這篇文章主要介紹了js簡(jiǎn)單實(shí)現(xiàn)圖片延遲加載的方法,涉及javascript針對(duì)頁面元素的遍歷與動(dòng)態(tài)設(shè)置技巧,需要的朋友可以參考下2016-07-07
純JS代碼實(shí)現(xiàn)隔行變色鼠標(biāo)移入高亮
這篇文章主要介紹了純JS代碼實(shí)現(xiàn)隔行變色鼠標(biāo)移入高亮的相關(guān)資料,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11
javascript簡(jiǎn)單拖拽實(shí)現(xiàn)代碼(鼠標(biāo)事件 mousedown mousemove mouseup)
javascript簡(jiǎn)單拖拽,簡(jiǎn)單拖拽實(shí)現(xiàn)2012-05-05

