文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Vue如何实现省市区三级联动el-select组件

2023-07-05 04:12

关注

这篇文章主要介绍“Vue如何实现省市区三级联动el-select组件”,在日常操作中,相信很多人在Vue如何实现省市区三级联动el-select组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue如何实现省市区三级联动el-select组件”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一 自定义组件

1 位置

Vue如何实现省市区三级联动el-select组件

2 代码

<template>  <div class="areaSelect flex">    <!-- 省选择框 -->    <el-select      filterable      :disabled="disabled"      v-model="province"      :size="size"      placeholder="省"      @change="changeCode($event,0)">      <el-option        v-for="item in provinceList"        :key="item.value"        :label="item.label"        :value="item.value">      </el-option>    </el-select>    <!-- 市选择框 -->    <el-select      filterable      :disabled="disabled"      class="center_select"      v-model="city"      placeholder="市"      @change="changeCode($event,1)">      <el-option        v-for="item in cityList"        :key="item.value"        :label="item.label"        :value="item.value">      </el-option>    </el-select>    <!-- 区选择框 -->    <el-select      filterable      :disabled="disabled"      v-model="area"      placeholder="区"      @change="changeCode($event,2)">      <el-option        v-for="item in areaList"        :key="item.value"        :label="item.label"        :value="item.value">      </el-option>    </el-select>  </div></template><script>  export default {    name: 'regionSelect',    props: {      size: '',      disabled: {        size: String,        type: Boolean,        default: false      },      code: {        type: Object,        default: () => {          return {            areaCode: '',            areaName: '',            cityCode: '',            cityName: '',            provinceCode: '',            provinceName: ''          }        }      }    },    data () {      return {        province: '',        city: '',        area: '',        provinceList: [],        cityList: [],        areaList: []      }    },    watch: {      code (val) {        if (val.areaName && val.areaName !== '') {          this.province = val.provinceCode          this.city = val.cityCode          this.area = val.areaCode          this.provinceCity(val.provinceCode)          this.cityArea(val.cityCode)        } else {          this.cityList = []          this.areaList = []        }      }    },    mounted () {      if (this.code.areaName && this.code.areaName !== '') {        this.province = this.code.provinceCode        this.city = this.code.cityCode        this.area = this.code.areaCode        this.provinceCity(this.code.provinceCode)        this.cityArea(this.code.cityCode)      }      this.getProvince()    },    methods: {      resetArea () {        this.province = ''        this.city = ''        this.area = ''      },      // 当 type == 0 ,data 表示省编码      // 当 type == 1 ,data 表示市编码      changeCode (data, type) {        if (type === 0) {          this.city = ''          this.area = ''          this.provinceCity(data)        }        if (type === 1) {          this.area = ''          this.cityArea(data)        }        if (this.province !== '' && this.city !== '' && this.area !== '') {          this.$emit(            'code', [{              code: this.province,              name: this.provinceList.find(                (val) => val.value === this.province              ).label            }, {              code: this.city,              name: this.cityList.find(                (val) => val.value === this.city              ).label            }, {              code: this.area,              name: this.areaList.find(                (val) => val.value === this.area              ).label            }]          )        }      },      // 从后台获得省数据列表      async getProvince () {        let result = []        let url = '/base/division/provinceList'        let data = await this.$http.get(url)        data.data.data.map((item) => {          result.push({            label: item.name,            value: item.code          })        })        this.provinceList = result      },      // 依据省编码获得市数据列表      async provinceCity (code) {        let result = []        let url = '/base/division/cityList'        let data = await this.$http({          url: url,          method: 'get',          params: {            provinceCode: code          }        })          data.data.data.map((item) => {          result.push({            label: item.name,            value: item.code          })        })        this.cityList = result      },      // 依据市编码获得区数据列表      async cityArea (code) {        let url = '/base/division/districtList'        let data = await this.$http({          url: url,          method: 'get',          params: {            cityCode: code          }        })        let result = []        data.data.data.map((item) => {          result.push({            label: item.name,            value: item.code          })        })        this.areaList = result      }    }  }</script><style>  .center_select {    margin: 0 10px;  }    .global_form .areaSelect {    width: 70%;  }    .global_form .areaSelect .el-select {    width: 33.33%;  }</style>

二 main.js 配置

// 行政区划三级选择import RegionSelect from './components/regionSelect'// 行政区划三级选择Vue.use(RegionSelect)// 行政区划三级选择Vue.component('regionSelect', RegionSelect)

三 使用方法

1 结构部分

<regionSelect  :code="item.value"  :disabled="item.disabled"  :size="layout.size"  @code="changeCode($event,item.prop)"  v-if="item.type==='region'"  ref="selectArea"></regionSelect>

2 代码部分

searchForm: {  province: '', // 省  city: '', // 市  district: '' // 区},item: { // 省市区 select 自定义组件传参部分  value: '',  type: 'region',  disabled: false},layout: { // 选择框样式,用于传参  size: ''},

3 样式部分

// 省市区选择框改变时,传递出来已选择的值changeCode (data, prop) {  this.searchForm.province = data[0].name  this.searchForm.city = data[1].name  this.searchForm.district = data[2].name},// 重置选择框resetForm () {  this.$refs.selectArea[0].resetArea()  // 清除省市区}

四 测试

1 级联选择

Vue如何实现省市区三级联动el-select组件

2 观察数据

Vue如何实现省市区三级联动el-select组件

到此,关于“Vue如何实现省市区三级联动el-select组件”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯