=

您现在的位置:新闻首页>热点要闻

mpvue微信小程序多列选择器用法:实现省份城市选择

2020-04-05 20:03贵阳新闻网编辑:admin人气:


前言

微信小程序默认给我们提供了一个省市区的picker选择器,只需将mode设置为region即可

<picker    mode="region"    bindchange="bindRegionChange"    value="{{region}}"    custom-item="{{customItem}}"  >

因为小程序默认提供的省市区选择器只能保存名称,不能保存id,而且我也不需要选择三级城市,所以这里打算通过mode="multiSelector"来实现省份城市的选择

城市数据json格式

关于省份城市数据的获取,这里我通过接口去获取数据,返回的json格式为

{    "code": 0,    "msg": "success",    "data": [        {            "id": 2,            "name": "北京",            "children": [                {                    "id": 36,                    "name": "北京市"                }            ]        }    ]}

在我们保存提交的时候只需要保存省份和城市的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>

设置picker mode属性为multiSelector

       mode="multiSelector"

1、这里需要注意的是,在mpvue中无法直接使用bindchange和bindcolumnchange,而是使用@change和@columnchange这种方式
2、value是一个数组,例如我们有两列

[["北京", "湖南"], ["长沙", "永州"]]

3、range也是一个数组,指定的是value值的选中索引值,下标从0开始,如[0,0]
4、如果我们的数据是一个二维对象数组,我们可以通过使用range-key来指定Object 中 key 的值作为选择器显示内容

5、当我们确认选中之后会触发@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]);      // 选中的省份和城市数据      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、在我们滚动每一列的值的时候会触发@columnchange事件

7、通过e.mp.detail.column和e.mp.detail.value可以获取到修改列对应的值

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

<
(来源:未知)

  • 凡本网注明"来源:贵阳新闻网的所有作品,版权均属于中贵阳新闻网,转载请必须注明中贵阳新闻网,http://www.zc579.com。违反者本网将追究相关法律责任。
  • 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。






图说新闻

更多>>
重庆草莓音乐节今夏强势来袭 本周末到中央公园

重庆草莓音乐节今夏强势来袭 本周末到中央公园



返回首页