【Vue】使用ElementUI组件基于element-china-area-data库实现省市区三级联动的组件封装

效果展示

依赖包版本

javascript 复制代码
"element-china-area-data": "^6.1.0",
"element-ui": "2.15.6",

组件代码

javascript 复制代码
// components/chinaAreaCascader/index.vue
<template>
  <el-cascader v-model="val" @change="handleChange" :options="options[type]"/>
</template>
<script>
import { provinceAndCityData,regionData,pcTextArr,pcaTextArr, codeToText} from 'element-china-area-data'
export default {
  name: 'chinaAreaCascader',
  props:{
    value:{ //双向绑定的值
      type:Array,
      default:()=>{
        return []
      }
    },
    // 选项类型
    type:{
      type:String,
      default:'regionData' //默认省市区三级联动
    }
  },
  data(){
    return {
      // 选项
      options:{
        provinceAndCityData, //provinceAndCityData省市二级联动 汉字+code
        regionData, //regionData省市区三级联动 汉字+code
        pcTextArr, //pcTextArr省市联动数据,纯汉字
        pcaTextArr, //pcaTextArr省市区联动数据,纯汉字
        codeToText, //codeToText是个大对象,属性是区域码,属性值是汉字 用法例如:codeToText['110000']输出北京市
      },
      val:[] //当前组件的值
    }
  },
  watch:{
    value:{
      handler(newVal) {
        this.val = newVal //绑定外部组件传入的默认值
      },
      deep:true
    }
  },
  methods:{
    // 双向绑定
    handleChange(){
      console.log(this.val,'当前选择')
      this.$emit('input',this.val) //触发input事件,将当前组件的值传给外部组件
    }
  }
}
</script>

使用组件

javascript 复制代码
<template>
	<el-form-item label="活动地点" class="mb5" prop="position">
	  <china-area-cascader v-model="formData.position" type="pcaTextArr" />
	</el-form-item>
</template>
<script>
import ChinaAreaCascader from '@/components/chinaAreaCascader/index.vue'

export default {
  components: { ChinaAreaCascader },
  data() {
  	formData:{
  		position:[], //省市区位置
	}
  }
}
</script>
相关推荐
知识分享小能手13 分钟前
Html5学习教程,从入门到精通,HTML5 简介语法知识点及案例代码(1)
开发语言·前端·javascript·学习·前端框架·html·html5
IT、木易16 分钟前
大白话React第二章深入理解阶段
前端·javascript·react.js
晚安72021 分钟前
Ajax相关
前端·javascript·ajax
图书馆钉子户23 分钟前
怎么使用ajax实现局部刷新
前端·ajax·okhttp
bin915340 分钟前
DeepSeek 助力 Vue 开发:打造丝滑的单选按钮(Radio Button)
前端·javascript·vue.js·ecmascript·deepseek
qianmoQ43 分钟前
第五章:工程化实践 - 第五节 - Tailwind CSS 常见问题解决方案
前端·css
那就可爱多一点点1 小时前
超高清大图渲染性能优化实战:从页面卡死到流畅加载
前端·javascript·性能优化
不能只会打代码2 小时前
六十天前端强化训练之第一天HTML5语义化标签深度解析与博客搭建实战
前端·html·html5
OpenTiny社区2 小时前
Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法
前端·node.js
菲力蒲LY2 小时前
输入搜索、分组展示选项、下拉选取,全局跳转页,el-select 实现 —— 后端数据处理代码,抛砖引玉展思路
java·前端·mybatis