vue + elementUI实现省市县三级联动的方法示例

yizhihongxing

下面我将为您详细讲解“vue + elementUI实现省市县三级联动的方法示例”的完整攻略。

1. 确定数据来源

实现省市县三级联动功能,首先需要确定数据来源,可以在后端中获取,也可以使用前端数据。本文以前端数据为例,数据格式如下:

const regionData = [
  {
    value: '110000',
    label: '北京市',
    children: [
      {
        value: '110100',
        label: '市辖区',
        children: [
          {
            value: '110101',
            label: '东城区'
          },
          {
            value: '110102',
            label: '西城区'
          },
          // 省略部分数据
        ]
      }
    ]
  },
  // 省略部分数据
]

2. 创建三个级联选择器

使用Element UI的el-cascader组件创建三个级联选择器,分别对应省、市、县:

<el-cascader
  :options="provinceList"
  placeholder="请选择省份"
  v-model="selectedProvince"
  clearable
  @change="provinceChange"
></el-cascader>
<el-cascader
  :options="cityList"
  placeholder="请选择城市"
  :disabled="!selectedProvince"
  v-model="selectedCity"
  clearable
  @change="cityChange"
></el-cascader>
<el-cascader
  :options="countyList"
  placeholder="请选择区县"
  :disabled="!selectedCity"
  v-model="selectedCounty"
  clearable
></el-cascader>

3. 加载省份数据

在组件的created()生命周期中加载省份数据,代码如下:

created() {
  this.provinceList = regionData.map(item => ({
    value: item.value,
    label: item.label
  }));
}

4. 加载城市数据

省份选择完成时,根据选中的省份value获取对应的城市数据,动态更新城市选择器。代码如下:

provinceChange(val) {
  this.selectedCity = '';
  this.selectedCounty = '';
  if (val.length > 0) {
    const province = this.getRegionByValue(val[val.length - 1]);
    this.cityList = province.children ? province.children.map(item => ({
      value: item.value,
      label: item.label
    })) : [];
  } else {
    this.cityList = [];
    this.countyList = [];
  }
}

5. 加载区县数据

城市选择完成时,根据选中的省份value和城市value获取对应的区县数据,动态更新区县选择器。代码如下:

cityChange(val) {
  this.selectedCounty = '';
  if (val.length > 0) {
    const province = this.getRegionByValue(this.selectedProvince[this.selectedProvince.length - 1]);
    const city = province.children ? province.children.find(item => item.value === val[val.length - 1]) : null;
    this.countyList = city && city.children ? city.children.map(item => ({
      value: item.value,
      label: item.label
    })) : [];
  } else {
    this.countyList = [];
  }
}

6. 辅助方法

在上面的代码中,获取对应value的地区信息使用了getRegionByValue方法,代码如下:

getRegionByValue(value) {
  let result = null;
  function findRegion(data) {
    for (let i = 0; i < data.length; i++) {
      if (data[i].value === value) {
        result = data[i];
        return true;
      } else if (data[i].children) {
        if (findRegion(data[i].children)) {
          return true;
        }
      }
    }
    return false;
  }
  findRegion(regionData);
  return result;
}

这个方法是采用递归方式遍历数据,查找对应value的地区信息。

示例说明

示例一

假设我们已经初始化完省份数据,现在需要根据用户选中的省份,动态加载城市数据。

第一步需要在data中定义三个变量:

data() {
  return {
    // 省份选中值
    selectedProvince: '',
    // 省份列表
    provinceList: [],
    // 城市列表
    cityList: []
  }
}

第二步在created()生命周期中加载省份数据:

created() {
  this.provinceList = regionData.map(item => ({
    value: item.value,
    label: item.label
  }));
}

第三步在省份选择器中绑定selectedProvince变量,并监听change事件:

<el-cascader
  :options="provinceList"
  placeholder="请选择省份"
  v-model="selectedProvince"
  clearable
  @change="provinceChange"
></el-cascader>

第四步在provinceChange方法中根据选中的省份value获取对应的城市数据:

provinceChange(val) {
  this.selectedCity = '';
  this.selectedCounty = '';
  if (val.length > 0) {
    const province = this.getRegionByValue(val[val.length - 1]);
    this.cityList = province.children ? province.children.map(item => ({
      value: item.value,
      label: item.label
    })) : [];
  } else {
    this.cityList = [];
    this.countyList = [];
  }
}

示例二

假设省份和城市数据已经加载完成,现在需要根据用户选择的城市,动态加载区县数据。

第一步需要在data中新增一个变量:

data() {
  return {
    // 城市选中值
    selectedCity: '',
    // 区县列表
    countyList: []
  }
}

第二步在cityChange方法中根据选中的省份value和城市value获取对应的区县数据:

cityChange(val) {
  this.selectedCounty = '';
  if (val.length > 0) {
    const province = this.getRegionByValue(this.selectedProvince[this.selectedProvince.length - 1]);
    const city = province.children ? province.children.find(item => item.value === val[val.length - 1]) : null;
    this.countyList = city && city.children ? city.children.map(item => ({
      value: item.value,
      label: item.label
    })) : [];
  } else {
    this.countyList = [];
  }
}

第三步在城市选择器中绑定selectedCity变量,并监听change事件:

<el-cascader
  :options="cityList"
  placeholder="请选择城市"
  :disabled="!selectedProvince"
  v-model="selectedCity"
  clearable
  @change="cityChange"
></el-cascader>

以上就是“vue + elementUI实现省市县三级联动的方法示例”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue + elementUI实现省市县三级联动的方法示例 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue.js Table 组件自定义列宽实现核心方法

    首先讲解一下如何自定义vue.js Table组件的列宽。 1. 确定列宽方式 在开始自定义列宽之前,我们需要明确列宽的计算方式。vue.js Table组件提供了三种列宽计算方式: border(边界):该方式是默认方式,单元格的宽度由单元格边框宽度和表格边框宽度共同决定。 width(固定宽度):该方式是将单元格宽度设置为一个固定的宽度。 min-wid…

    Vue 2023年5月27日
    00
  • vue与django(drf)实现文件上传下载功能全过程

    下面我将介绍通过Vue和Django(DRF)实现文件上传下载功能的全过程,包含以下几个步骤: 在Vue中创建文件上传表单并发送请求到Django后端; 在Django后端接收文件并保存到指定目录; 编写Django视图函数实现文件下载功能; 在Vue中调用视图函数完成文件下载。 1. 创建Vue文件上传表单并发送请求到Django后端 我们可以使用 axi…

    Vue 2023年5月28日
    00
  • Vue Router 实现动态路由和常见问题及解决方法

    让我来详细讲解一下“Vue Router 实现动态路由和常见问题及解决方法”的完整攻略。 一、动态路由的实现 1. 动态路由的定义 Vue Router 的动态路由,是指路由路径中包含变量的路由。例如,我们需要设计一个新闻详情页的路由,每篇新闻的 ID 都不同,我们可以在路由路径中使用变量表示这个 ID,例如 /news/:id。 2. 动态路由的示例 Vu…

    Vue 2023年5月27日
    00
  • Vue Element前端应用开发之Vuex中的API Store View的使用

    Vue Element前端应用开发之Vuex中的API Store View的使用 Vue Element是一套基于Vue.js的桌面端组件库。其中,Vuex是Vue.js的官方状态管理工具,在前端应用开发中起着至关重要的作用。在Vuex中,API Store View是常用的一种状态存储方式,对于数据多层级的情况,非常实用。 API Store View是…

    Vue 2023年5月27日
    00
  • vue3.0中setup使用(两种用法)

    下面是Vue 3.0中setup使用的完整攻略。 什么是setup setup是Vue 3.0中新引入的API,是Vue3.0新的组件选项。setup函数是在beforeCreate和created之间执行的,用于组件的初始化状态。它是一个接收props和context两个参数的函数,返回一个渲染函数可用的数据。通过setup函数,我们可以更好的组织代码,实…

    Vue 2023年5月28日
    00
  • Vue中对数组和对象进行遍历和修改方式

    那么我们来详细讲解一下Vue中对数组和对象进行遍历和修改的方式。 对象的遍历和修改 首先,我们来看一下如何遍历一个对象。Vue提供了一个专门用于对象遍历的指令v-for,通过它可以方便地遍历对象的每一个属性。 <template> <div> <ul> <li v-for="(value, key) in …

    Vue 2023年5月27日
    00
  • 微信小程序实现表单验证提交功能

    讲解“微信小程序实现表单验证提交功能”的完整攻略,具体步骤如下: 1. 编写表单 首先需要在小程序页面中编写表单,包括输入框、下拉框等等常见表单元素,并且给每一个表单元素设置一个唯一的id值,以便后面表单验证时获取元素。代码示例: <form> <input id="name" placeholder="请输入…

    Vue 2023年5月27日
    00
  • 详解Vue3.0 前的 TypeScript 最佳入门实践

    详解Vue3.0 前的 TypeScript 最佳入门实践 介绍 TypeScript TypeScript 是 JavaScript 的超集,是一种强类型的开发语言,它可以让我们在开发大型 Web 应用时提供更好的代码可读性和可维护性。TypeScript 最初由微软开发,现已经成为了开源项目,并得到了越来越多的开发者的支持。 安装 TypeScript …

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部