vue 中国省市区级联数据 三级联动

vue 中国省市区级联数据 三级联动

  1. 安装插件 npm install element-china-area-data@5.0.2 -S 当前版本以测试,可用。
  2. 组件中使用了 element-ui, https://element.eleme.cn/#/zh-CN/component/installation 库 请注意安装。
  3. 插件文档 https://www.npmjs.com/package/element-china-area-data
  4. 先上图
    在这里插入图片描述
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b5a0ab5c8fdc4cadbd8061e8a791e7f6.png

在这里插入图片描述

  1. 在components文件夹下面新建 mpAreaSelect.vue
<template>
  <el-cascader
    :options="options"
    :disabled="disabled"
    :placeholder="placeholder"
    :value="selectedOptions"
    @change="handleChange"
    :clearable="clearable"
  >
  </el-cascader>
</template>

<script>
import  {
   
  provinceAndCityDataPlus,
  regionData,
  TextToCode,
  CodeToText,
} from 'element-china-area-data'
export default {
   
  name: 'mpAreaSelect',
  computed: {
   
    selectedOptions() {
   
      let selected = this.selected.filter((item) => item != '' && item != null)
      let len = selected.length
      let textArr = []
      switch (len) {
   
        case 1:
          if(TextToCode[selected[0]]){
   
            textArr.push(TextToCode[selected[0]].code)
          }else{
   
            textArr = []
          }
          
          break
        case 2:
         if(TextToCode[selected[0]]){
   
            textArr.push(TextToCode[selected[0]].code)
          }else{
   
            textArr = []
          }
           if(TextToCode[selected[0]] && TextToCode[selected[0]][selected[1]]){
   
            textArr.push(TextToCode[selected[0]][selected[1]].code)
          }else{
   
            textArr = []
          }
         
          break
        case 3:
           if(TextToCode[selected[0]]){
   
            textArr.push(TextToCode[selected[0]].code)
          }else{
   
            textArr = []
          }
           if(TextToCode[selected[0]] && TextToCode[selected[0]][selected[1]]){
   
            textArr.push(TextToCode[selected[0]][selected[1]].code)
          }else{
   
            textArr = []
          }
          if(TextToCode[selected[0]] && TextToCode[selected[0]][selected[1]] && TextToCode[selected[0]][selected[1]][selected[2]]){
   
            textArr.push(TextToCode[selected[0]][selected[1]][selected[2]].code)
          }else{
   
            textArr = []
          }
          break
        default:
          break
      }
      return textArr
    },

    options() {
   
      switch (this.level) {
   
        case 2:
          return provinceAndCityDataPlus
        case 3:
          return regionData
        default:
          return regionData
      }
    },
  },

  props: {
   
    selected: {
   
      type: Array,
      default: [],
    },
    disabled: {
   
      type: Boolean,
      default: false,
    },
    placeholder: {
   
      type: String,
      default: '',
    },
    level: {
   
      type: Number,
      default: 3,
    },
    clearable:{
   
      type: Boolean,
      default: false,
    }
  },
  methods: {
   
    handleChange(value) {
   
      console.log(TextToCode)
      console.log(CodeToText)
      console.log(provinceAndCityDataPlus)
      console.log(regionData)
      console.log(value)
      this.$emit(
        'change',
        value.map((item) => CodeToText[item]),value
      )
    },
  },
}
</script>

<style>
</style>
  1. 组件的使用
<template>
  <div>
    <div>
      <div>请选择地区:</div>
      <mp-area-select
        style="width: 400px"
        :selected="selected"
        placeholder="请选择地区"
        @change="changeAddress"
      ></mp-area-select>
      <div>回显地区:</div>
      <mp-area-select
        style="width: 400px"
        :selected="selectedView"
      ></mp-area-select>
    </div>
  </div>
</template>
<script>
import MpAreaSelect from '@/components/mpAreaSelect';
export default {
   
  components:{
   
    MpAreaSelect
  },
  data() {
   
    return {
   
      selected:[],
      selectedView:[],
    };
  },
  mounted(){
   
    this.$nextTick(()=>{
   
      this.selectedView = ["北京市", "市辖区", "朝阳区"]
    })
  },
  methods: {
   
    changeAddress(arr,code) {
   
      console.log(arr,77777777)
      console.log(code,88888888)
    },
  },
};
</script>
  1. 搞定!组件以及示例可直接复制使用!
  2. 另外 省市区JSON数据串 已经放在博客顶部,可自行下载后,自定义组件。

相关推荐

  1. 微信小程序实现省市区级选择组件

    2023-12-14 21:04:02       24 阅读
  2. EasyExcel实现三级联动

    2023-12-14 21:04:02       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-14 21:04:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-14 21:04:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-14 21:04:02       82 阅读
  4. Python语言-面向对象

    2023-12-14 21:04:02       91 阅读

热门阅读

  1. 计算机网络考试选择题——附答案

    2023-12-14 21:04:02       65 阅读
  2. Android 10.0 系统framework修改低电量关机值为2%

    2023-12-14 21:04:02       53 阅读
  3. traj_dist笔记 setup.py

    2023-12-14 21:04:02       65 阅读
  4. 网络基础试题选择题——附答案

    2023-12-14 21:04:02       53 阅读
  5. 数据库常用锁

    2023-12-14 21:04:02       57 阅读
  6. Hugo安装

    2023-12-14 21:04:02       61 阅读
  7. 【tcmalloc】(二)整体设计和thread cache(申请)

    2023-12-14 21:04:02       58 阅读