返回
创建省市区选择器组件
前端
2023-10-11 05:18:32
一、前言
在mpvue小程序的项目中,我有遇到手动封装一个省市区选择器组件的需求。当时因为时间比较紧,做得不是很好,一直挺遗憾。最近抽了一些时间终于重新把这个组件重新封装了一遍。这篇博客主要介绍一下怎么用、默认选中功能和一些实现的原理。
二、组件使用
这个选择器组件就是一个.vue文件,所有的样式和逻辑都放在了这个文件里。
1. 引入组件
// 在需要使用组件的页面中引入
import mPicker from '@/components/mPicker/mPicker.vue'
// 在components目录下创建mPicker.vue文件
2. 在页面中使用组件
<template>
<m-picker :data="pickerData" :defaultValue="defaultValue" @change="handleChange" />
</template>
<script>
import mPicker from '@/components/mPicker/mPicker.vue'
export default {
components: {
mPicker
},
data() {
return {
// 省市区数据
pickerData: [
{
name: '北京',
code: '110000',
children: [
{
name: '东城区',
code: '110101',
},
{
name: '西城区',
code: '110102',
},
],
},
{
name: '上海',
code: '310000',
children: [
{
name: '黄浦区',
code: '310101',
},
{
name: '徐汇区',
code: '310104',
},
],
},
],
// 默认选中值
defaultValue: ['110000', '110101'],
}
},
methods: {
handleChange(value) {
console.log('picker value changed', value)
},
},
}
</script>
3. 组件属性
属性 | 类型 | 默认值 | |
---|---|---|---|
data | Array | - | 省市区数据,格式为数组,数组元素为对象,对象包含name、code、children属性 |
defaultValue | Array | - | 默认选中值,格式为数组,数组元素为字符串,字符串为省市区编码 |
@change | Function | - | 选中值发生变化时触发的事件,回调函数的参数为选中的值,格式为数组,数组元素为字符串,字符串为省市区编码 |
三、默认选中功能
默认选中功能是指,当组件第一次渲染时,根据defaultValue属性设置的默认值,自动选中对应的省市区。
实现这个功能需要用到组件的created生命周期钩子函数。在created钩子函数中,我们可以获取到组件的props,然后根据props中的defaultValue属性,找到对应的省市区数据,并设置组件的value属性。
export default {
// 省市区数据
props: {
data: {
type: Array,
required: true,
},
defaultValue: {
type: Array,
default: [],
},
},
data() {
return {
value: [],
}
},
created() {
this.setDefaultValue()
},
methods: {
setDefaultValue() {
if (this.defaultValue.length === 0) {
return
}
const provinceCode = this.defaultValue[0]
const cityCode = this.defaultValue[1]
const districtCode = this.defaultValue[2]
const province = this.data.find(item => item.code === provinceCode)
const city = province.children.find(item => item.code === cityCode)
const district = city.children.find(item => item.code === districtCode)
this.value = [provinceCode, cityCode, districtCode]
},
},
}
四、实现原理
这个选择器组件的核心是使用了一个叫做mPicker的组件库。mPicker是一个非常强大的组件库,它提供了各种各样的选择器组件,比如日期选择器、时间选择器、省市区选择器等等。
省市区选择器组件的实现原理很简单,就是把mPicker组件封装成一个.vue文件,然后在组件内部使用mPicker组件。
1. mPicker组件的使用
<template>
<mp-picker :data="pickerData" :value="value" @change="handleChange" />
</template>
<script>
import mPicker from 'mp-picker'
export default {
components: {
mPicker
},
props: {
data: {
type: Array,
required: true,
},
value: {
type: Array,
default: [],
},
},
methods: {
handleChange(value) {
this.$emit('change', value)
},
},
}
</script>
2. 省市区数据格式
省市区数据格式是一个数组,数组元素为对象,对象包含name、code、children属性。name属性是省市区的名字,code属性是省市区的编码,children属性是省市区的子级,子级也是一个数组,数组元素也是对象,格式与父级相同。
const pickerData = [
{
name: '北京',
code: '110000',
children: [
{
name: '东城区',
code: '110101',
},
{
name: '西城区',
code: '110102',
},
],
},
{
name: '上海',
code: '310000',
children: [
{
name: '黄浦区',
code: '310101',
},
{
name: '徐汇区',
code: '310104',
},
],
},
]
五、结语
以上就是mpvue手动封装省市区选择器组件的全部内容了。希望这篇博客对你有帮助。如果在使用过程中有任何问题,欢迎随时留言。