1. 三级选择器组件的介绍
在很多小程序或移动应用中,用户需要根据自己的需求从一堆数据中进行选择,而这些数据可能都储存在相应的数据集或者数据库中。为了让用户方便地选择数据,我们需要一个可以通过层级选择的组件,这里就出现了三级选择器组件。
三级选择器组件常见于一些需要用户选择区域的场景,例如:用户在预定机票时需要选择起始地、目的地和出发时间,这个时候就可以使用三级选择器组件。
在小程序中,三级选择器常用于选择日期、时间、城市等数据。一般来说,三级选择器组件的选择器数目可以根据实际需求进行扩展,不过目前较常见的便是“省、市、区/县”三级选择器。
2. 三级选择器组件的实现原理
三级选择器组件的实现原理比较简单,核心代码就是通过请求获取数据并渲染到页面上,同时监听用户选择的动作,并把用户选择的数据传递出来。
下面是一个简单的三级选择器组件代码实现方法:
// 三级选择器组件代码
Component({
properties: { // 组件的属性列表
// 三级选择器的标题和占位符
title: {
type: String,
value: ''
},
placeholder: {
type: String,
value: ''
},
// 初始数据数组,分别为一级、二级和三级数据
firstArr: {
type: Array,
value: []
},
secondArr: {
type: Array,
value: []
},
thirdArr: {
type: Array,
value: []
}
},
data: { // 组件的内部数据
// 选择器选中的值的下标,分别为一级、二级和三级下标
firstIndex: 0,
secondIndex: 0,
thirdIndex: 0
},
methods: { // 组件的方法列表
// 监听一级选择器的改变,并重新渲染二级、三级选择器
bindfirstChange: function(e) {
let index = e.detail.value
this.setData({
firstIndex: index,
secondIndex: 0,
thirdIndex: 0
})
// 重新渲染二级、三级选择器
this.triggerEvent('firstChange', {
index: index
})
},
// 监听二级选择器的改变,并重新渲染三级选择器
bindsecondChange: function(e) {
let index = e.detail.value
this.setData({
secondIndex: index,
thirdIndex: 0
})
// 重新渲染三级选择器
this.triggerEvent('secondChange', {
index: index
})
},
// 监听三级选择器的改变,并把用户选择的数据传递出来
bindthirdChange: function(e) {
let index = e.detail.value
this.setData({
thirdIndex: index
})
// 把用户选择的数据传递出来
this.triggerEvent('thirdChange', {
firstIndex: this.data.firstIndex,
secondIndex: this.data.secondIndex,
thirdIndex: index
})
}
}
})
2.1 三级选择器组件的数据格式
在实际应用中,我们一般使用数据库或数据集来存储并获取三级选择器的数据。三级选择器组件的数据格式需要满足以下要求:
1. 数据格式必须为 JSON 格式;
2. 数据需要按照一级、二级、三级的顺序排列,例如:
{
"浙江省": {
"杭州市": {
"西湖区": [],
"滨江区": [],
"萧山区": []
},
"温州市": {
"鹿城区": [],
"瓯海区": [],
"龙湾区": []
}
},
"江苏省": {
"南京市": {
"玄武区": [],
"白下区": [],
"秦淮区": []
},
"苏州市": {
"姑苏区": [],
"相城区": [],
"吴中区": []
}
}
}
2.2 三级选择器组件的数据渲染
三级选择器组件的数据渲染需要分为三步:
1. 页面加载时初始化一级选择器的数据;
2. 监听用户对一级选择器的改变,并根据选择的一级数据提取出对应的二级数据,并重新渲染二级选择器;
3. 监听用户对二级选择器的改变,并根据选择的二级数据提取出对应的三级数据,并重新渲染三级选择器。
下面是一个简单的三级选择器组件数据渲染的代码实现方法:
// 三级选择器组件数据渲染代码
// 获取数据并渲染一级选择器的数据
getFirstData() {
wx.request({
url: 'https://xxx.com/province',
success: (res) => {
this.setData({
firstArr: res.data
})
// 获取一级选择器的默认数据,并重新渲染二级、三级选择器
this.getDefaultData(res.data[0])
}
})
},
// 获取二级选择器的数据
getSecondData(province) {
wx.request({
url: 'https://xxx.com/city',
data: {
province: province
},
success: (res) => {
this.setData({
secondArr: res.data
})
// 获取二级选择器的默认数据,并重新渲染三级选择器
this.getDefaultData(res.data[0])
}
})
},
// 获取三级选择器的数据
getThirdData(city) {
wx.request({
url: 'https://xxx.com/county',
data: {
city: city
},
success: (res) => {
this.setData({
thirdArr: res.data
})
}
})
},
// 获取默认的数据并重新渲染选择器
getDefaultData(firstItem) {
wx.request({
url: 'https://xxx.com/default',
data: {
firstItem: firstItem
},
success: (res) => {
this.setData({
secondArr: res.data.secondArr,
thirdArr: res.data.thirdArr
})
}
})
}
2.3 三级选择器组件的数据传递
当用户选择完数据之后,三级选择器组件需要把选择的数据传递给父组件或页面,以便进行相应的操作。
下面是一个简单的三级选择器组件数据传递的代码实现方法:
// 三级选择器组件数据传递代码
// 监听一级选择器的改变,并重新渲染二级、三级选择器
onFirstChange(e) {
let index = e.detail.index
let firstItem = this.data.firstArr[index]
this.getSecondData(firstItem)
},
// 监听二级选择器的改变,并重新渲染三级选择器
onSecondChange(e) {
let index = e.detail.index
let city = this.data.secondArr[index]
this.getThirdData(city)
},
// 监听三级选择器的改变,并把选择的数据传递出去
onThirdChange(e) {
let data = e.detail
let firstItem = this.data.firstArr[data.firstIndex]
let secondItem = this.data.secondArr[data.secondIndex]
let thirdItem = this.data.thirdArr[data.thirdIndex]
let selectedData = {
first: firstItem,
second: secondItem,
third: thirdItem
}
// 把选择的数据传递到父组件或页面中
this.triggerEvent('change', {
selectedData: selectedData
})
}
3. 三级选择器组件的使用方法
在需要使用三级选择器组件的页面或组件中进行引用即可,同时传入相应的参数:
// 页面或组件中引用三级选择器组件
<selector title="请选择地址" placeholder="请选择" firstArr="{{firstArr}}" secondArr="{{secondArr}}" thirdArr="{{thirdArr}}" bindchange="selectorChange"></selector>
参数说明:
1. title:三级选择器的标题;
2. placeholder:三级选择器的占位符;
3. firstArr、secondArr、thirdArr:三级选择器的数据,分别为一级、二级和三级数据;
4. bindchange:监听用户选择的数据并进行相应的操作。
4. 总结
三级选择器组件是一个实现层级选择的好工具,可以方便地让用户选择自己需要的数据。在小程序中,实现一个三级选择器组件并不算太难,只需要理解其实现原理并进行相应的代码实现即可。
在实际操作中,我们需要对三级选择器组件的数据格式、数据渲染和数据传递等方面进行相应的优化,以便让用户更加自然地使用三级选择器组件。