这篇文章给大家分享的是有关小程序中实现三级选择器组件的案例的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、微信小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了莱山免费建站欢迎大家使用!效果
实现过程
undefined
{{title}} {{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
在小程序已有的picker组件中设置mode="multiSelector"
,使之成为多列选择器。
在多列选择器中有两个重要的参数:
properties: { multiArray: Array, multiIndex: Array }
multiArray是一个二维数组,存放选择器每一列上的选项列表。multiIndex是一个一维数组,存放每一列被选中的值,例:[0,0,0]
表示第一列选中了第0个选项,第二列也选中了第0个选项,以此类推。这两个参数都由用到三列选择器的页面传入。
在小程序已有的picker组件中绑定bindPickerChange事件和columnchange事件,当用户确定选择器的选项值或改变某列选项值时会分别触发这两个事件:
methods: { //这个只有在点确定的时候才会触发 bindPickerChange: function (e) { this.triggerEvent("multiSelectorValue", e.detail)// 更新下标字段 multiIndex,event.detail = {value: value} }, columnchange: function (e) { this.triggerEvent("multiSelectorColumn", e.detail)// detail包含当前改变的列和改变的列的数值,event.detail = {column: column, value: value} } }
设置multiSelectorValue事件和multiSelectorColumn事件,来让用到三列选择器的页面捕捉到选择器选项值的改变。
在要用到三列选择器的页面里引入三列选择器组件,比如叫v-picker-multiSelector:
通过设置receiveMultiSelectorValue函数和receiveMultiSelectorColumn函数来接收选项值的变化:
//当用户改变种植区某列选项时触发的事件 receiveMultiSelectorColumn: function (e) { const column = e.detail.column const columnValue = e.detail.value switch (column) { case 0: this.data.multiIndex[0] = columnValue //更新省值 this.data.multiArray[1] = this.testGetCity(this.data.provinceList[columnValue]) //获取市列表 this.data.cityList = this.data.multiArray[1] //更新市列表 this.data.multiIndex[1] = 0 // 将市默认选择第一个 this.data.multiArray[2] = this.testGetPlantingArea(this.data.cityList[0]) //获取区列表 this.data.plantingAreaList = this.data.multiArray[2] //更新种植区列表 this.data.multiIndex[2] = 0 // 将区默认选择第一个 this.setData({ multiArray: this.data.multiArray, multiIndex: this.data.multiIndex }) break case 1: this.data.multiIndex[1] = columnValue //更新市值 //this.data.multiArray[2] = this.getPlantingArea(this.data.cityList[columnValue])//获取区列表 this.data.multiArray[2] = this.testGetPlantingArea(this.data.cityList[columnValue]) //测试用,获取区列表 this.data.plantingAreaList = this.data.multiArray[2] //更新种植区列表 this.data.multiIndex[2] = 0 // 将区默认选择第一个 this.setData({ multiArray: this.data.multiArray, multiIndex: this.data.multiIndex }) break } }
当三列选择器的某列值改变时,页面从组件里接收到改变的列数(column)和该列被选择的值(columnValue)。对column进行判断,如果column=0,那么根据columnValue的值向后端请求回该省的市列表,并根据市列表的的第一位向后端请求回该市的区列表。如果column=1,那么那么根据columnValue的值向后端请求回该市的区列表。
receiveMultiSelectorValue: function (e) { this.setData({ multiIndex: e.detail.value }) this.data.region[0] = this.data.multiArray[0][this.data.multiIndex[0]] this.data.region[1] = this.data.multiArray[1][this.data.multiIndex[1]] this.data.region[2] = this.data.multiArray[2][this.data.multiIndex[2]] this.setData({ region: this.data.region }) //console.log(this.data.region) }
当用户确定三列选择器的选项时,页面从组件中接收到multiIndex的值,并对选项值进行更新。
感谢各位的阅读!关于小程序中实现三级选择器组件的案例就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!
分享文章:小程序中实现三级选择器组件的案例-创新互联
链接URL:http://lswzjz.com/article/dioogj.html