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ū)選擇器只能保存名稱(chēng),不能保存id,而且我也不需要選擇三級(jí)城市,所以這里打算通過(guò)mode="multiSelector"
來(lái)實(shí)現(xiàn)省份城市的選擇
城市數(shù)據(jù)json格式
關(guān)于省份城市數(shù)據(jù)的獲取,這里我通過(guò)接口去獲取數(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中無(wú)法直接使用bindchange和bindcolumnchange,而是使用@change和@columnchange這種方式
2、value是一個(gè)數(shù)組,例如我們有兩列
[["北京", "湖南"], ["長(zhǎng)沙", "永州"]]
3、range也是一個(gè)數(shù)組,指定的是value值的選中索引值,下標(biāo)從0開(kāi)始,如[0,0]
4、如果我們的數(shù)據(jù)是一個(gè)二維對(duì)象數(shù)組,我們可以通過(guò)使用range-key來(lái)指定Object 中 key 的值作為選擇器顯示內(nèi)容
5、當(dāng)我們確認(rèn)選中之后會(huì)觸發(fā)@change事件
// 城市選擇 獲取選中的值 [0,0] 這里需要注意的是獲取值的方式在mpvue中通過(guò)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、通過(guò)e.mp.detail.column
和e.mp.detail.value
可以獲取到修改列對(duì)應(yīng)的值
console.log( "修改的列為", e.mp.detail.column, ",值為", e.mp.detail.value );
通過(guò)獲取到修改的數(shù)據(jù)更新multiIndex的值
// 監(jiān)聽(tīng)滾動(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://chabaoo.cn/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à)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
js實(shí)現(xiàn)方塊上下左右移動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)方塊上下左右移動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08仿iPhone通訊錄制作小程序自定義選擇組件的實(shí)現(xiàn)
這篇文章主要介紹了仿iPhone通訊錄制作小程序自定義選擇組件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05解決layer.msg 不居中 ifram中的問(wèn)題
今天小編就為大家分享一篇解決layer.msg 不居中 ifram中的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09JavaScript簡(jiǎn)單實(shí)現(xiàn)彈出拖拽窗口(二)
這篇文章再次為大家詳細(xì)介紹了JavaScript簡(jiǎn)單實(shí)現(xiàn)彈出拖拽窗口的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06JavaScript XML和string相互轉(zhuǎn)化實(shí)現(xiàn)代碼
兩個(gè)小function實(shí)現(xiàn)XML和string相互轉(zhuǎn)化,需要的朋友可以參考下。2011-07-07JS實(shí)現(xiàn)的簡(jiǎn)單分頁(yè)功能示例
這篇文章主要介紹了JS實(shí)現(xiàn)的簡(jiǎn)單分頁(yè)功能,涉及javascript事件響應(yīng)及頁(yè)面元素遍歷、動(dòng)態(tài)構(gòu)造等相關(guān)操作技巧,需要的朋友可以參考下2018-08-08Webpack打包c(diǎn)ss后z-index被重新計(jì)算的解決方法
這篇文章主要跟大家分享了Webpack打包c(diǎn)ss后z-index被重新計(jì)算的解決方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06.net MVC+Bootstrap下使用localResizeIMG上傳圖片
這篇文章主要為大家詳細(xì)介紹了.net MVC和Bootstrap下使用 localResizeIMG上傳圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04JS實(shí)現(xiàn)自動(dòng)變換的菜單效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)自動(dòng)變換的菜單效果代碼,可實(shí)現(xiàn)自動(dòng)變換菜單選中項(xiàng)的技巧,涉及JavaScript定時(shí)函數(shù)觸發(fā)頁(yè)面樣式屬性變換的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09