微信小程序默認給咱們提供了一個省市區的picker選擇器,只需將mode設置爲region便可html
<picker mode="region" bindchange="bindRegionChange" value="{{region}}" custom-item="{{customItem}}" >
由於小程序默認提供的省市區選擇器只能保存名稱,不能保存id,並且我也不須要選擇三級城市,因此這裏打算經過mode="multiSelector"來實現省份城市的選擇vue
關於省份城市數據的獲取,這裏我經過接口去獲取數據,返回的json格式爲json
{ "code": 0, "msg": "success", "data": [ { "id": 2, "name": "北京", "children": [ { "id": 36, "name": "北京市" } ] } ] }
在咱們保存提交的時候只須要保存省份和城市的id便可小程序
<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>
設置picker mode屬性爲multiSelector微信小程序
mode="multiSelector"
一、這裏須要注意的是,在mpvue中沒法直接使用bindchange和bindcolumnchange,而是使用@change和@columnchange這種方式
二、value是一個數組,例如咱們有兩列數組
[["北京", "湖南"], ["長沙", "永州"]]
三、range也是一個數組,指定的是value值的選中索引值,下標從0開始,如[0,0]
四、若是咱們的數據是一個二維對象數組,咱們能夠經過使用range-key來指定Object 中 key 的值做爲選擇器顯示內容微信
五、當咱們確認選中以後會觸發@change事件this
// 城市選擇 獲取選中的值 [0,0] 這裏須要注意的是獲取值的方式在mpvue中經過e.mp.detail.value而不是e.detail.value bindCityChange(e) { // 選中的值索引 console.log(e.mp.detail.value[0], e.mp.detail.value[1]); // 選中的省份和城市數據 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]]; },
六、在咱們滾動每一列的值的時候會觸發@columnchange事件code
七、經過e.mp.detail.column和e.mp.detail.value能夠獲取到修改列對應的值component
console.log( "修改的列爲", e.mp.detail.column, ",值爲", e.mp.detail.value );
經過獲取到修改的數據更新multiIndex的值
// 監聽滾動事件 滾動第一列 修改第二列數據 bindCityColumnChange(e) { // 更新multiIndex的值 this.multiIndex[e.mp.detail.column] = e.mp.detail.value; //加載對應省份下城市數據 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: [], } }
https://www.cnblogs.com/Oopa/p/7266976.html https://developers.weixin.qq.com/miniprogram/dev/component/picker.html