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

下面我将为您详细讲解“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的key属性

    以下是详解如何理解vue的key属性的完整攻略: 1. 什么是Vue的key属性? Vue中的key属性是在使用v-for指令时用来提高性能和防止数据混乱的重要属性。key属性可以为每个v-for循环中的子元素设定一个唯一的标识符,Vue在渲染虚拟DOM节点时会根据key属性来判断哪些节点需要被更新,从而减少页面重新渲染的量,提高页面性能。 2. 如何理解V…

    Vue 2023年5月28日
    00
  • 详解前后端分离之VueJS前端

    前后端分离是现代web开发中非常流行的一种技术架构,该架构将前端与后端分离开来,前端负责展示数据,后端只负责提供数据接口。VueJS是一种流行的前端JS框架,本文将从如何搭建VueJS前端的角度来详解前后端分离架构的实现。 步骤一:安装VueJS及相关依赖 在搭建VueJS前端之前,需要先安装好VueJS及相关依赖。在命令行中输入以下命令: npm inst…

    Vue 2023年5月27日
    00
  • 基于vue cli重构多页面脚手架过程详解

    下面我将为你详细讲解“基于vue-cli重构多页面脚手架过程详解”的完整攻略。 一、背景和意义 在日常开发中,使用多页面开发的情况比较常见,但是现有的脚手架不一定完全支持多页面开发。因此,我们需要对现有的多页面脚手架进行重构,以适应开发需求。本攻略就是基于Vue CLI对多页面脚手架进行重构的具体过程。 二、多页面脚手架原理 多页面脚手架就是将每个页面都单独…

    Vue 2023年5月28日
    00
  • Vuex的安装、搭建及案例详解

    Vuex的安装 在使用Vuex之前,需要在项目中安装Vuex依赖包。可以通过npm或者yarn进行安装。 使用npm安装: npm install vuex –save 使用yarn安装: yarn add vuex Vuex的搭建 Vuex的核心概念包括state、mutations、actions、getters和modules。 以下是一个简单的Vu…

    Vue 2023年5月27日
    00
  • vue动态渲染svg、添加点击事件的实现

    为了实现vue动态渲染svg以及添加点击事件,需要采用SVG语言作为矢量图形语言,使用vue指令中的v-html渲染SVG字符串,以及添加@click事件监听器。 实现步骤: 准备SVG字符串。可以是文件、变量定义或远程获取的内容。例如以下的SVG字符串: <svg width="100" height="100&quot…

    Vue 2023年5月28日
    00
  • vue2.0 watch里面的 deep和immediate用法说明

    下面我来详细讲解一下 “vue2.0 watch里面的 deep和immediate用法说明”, 希望对你有所帮助。 watch 在Vue.js中,我们可以使用 watch 来监听数据的改变,从而执行对应的操作。 Watch 是 Vue 实例的一个选项属性,用于监听 Vue 实例上的数据变化。当数据发生改变时,会执行 watch 选项的对应方法。 deep …

    Vue 2023年5月29日
    00
  • Vue-resource实现ajax请求和跨域请求示例

    下面是详细讲解“Vue-resource实现ajax请求和跨域请求示例”的攻略。 一、Vue-resource简介 Vue-resource是Vue.js的一个插件,用于处理HTTP请求。它提供了一个易于使用的API,使得在Vue.js应用程序中与API进行通信非常简单和高效。 二、Vue-resource安装 使用Vue-resource之前,需要先安装它…

    Vue 2023年5月27日
    00
  • vue中计算属性computed理解说明包括vue侦听器,缓存与computed的区别

    让我们来详细讲解一下Vue中的计算属性computed。 计算属性computed 计算属性computed是Vue中常用的一个属性,它可以计算出新的值。在Vue中,当多个属性相关联时,我们可以使用计算属性computed来进行复杂的计算。 计算属性的使用 在Vue组件中使用计算属性computed,需要在Vue实例中添加computed属性,并返回一个新的…

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