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日

相关文章

  • 仿照Element-ui实现一个简易的$message方法

    这是一个完整的攻略,步骤如下: 步骤一:创建组件 首先,我们需要创建一个Vue组件来实现这个消息框功能。 我们可以在src/components目录下创建一个messageBox.vue文件,并在其中写入以下代码: <template> <div v-show="visible" :class="[‘messa…

    Vue 2023年5月29日
    00
  • 简单谈谈Vue3中的ref和reactive

    一、Vue3中的ref和reactive是什么? Vue3中的ref和reactive都属于Vue3的响应式系统。这个响应式系统支持应用的状态自动更新,并且Vue3的响应式系统相较于Vue2有很大的改进。 在Vue2中,响应式数据只能定义在Vue组件实例的data选项中,而在Vue3中,ref和reactive可以定义在任何地方。 ref是一个函数,它可以将…

    Vue 2023年5月27日
    00
  • Vue3实现全局loading指令的示例详解

    下面是关于“Vue3实现全局loading指令的示例详解”的完整攻略。 简介 在Vue3中,可以使用自定义指令来给DOM元素绑定一些额外的行为,比如全局loading指令。 实现步骤 第一步:创建指令 在Vue3中,我们可以使用app.directive()方法来创建一个指令。下面是一个简单的指令示例,实现了在元素上添加一个loading图标的功能: imp…

    Vue 2023年5月28日
    00
  • vue+elementUI下拉框回显问题及解决方式

    下面我会详细讲解“Vue+ElementUI下拉框回显问题及解决方式”的攻略,包含问题背景、解决方案以及带有两个示例的详细说明。 问题背景 在使用Vue+ElementUI进行开发时,我们会经常使用下拉框作为表单元素,这些下拉框的选项通常是由后端接口返回的数据来渲染的。但是,在某些场景下,我们需要对已经选中的下拉框选项进行回显,这时就会出现下拉框选项未能正确…

    Vue 2023年5月28日
    00
  • 由浅入深讲解vue2和vue3的区别

    由浅入深讲解 Vue2 和 Vue3 的区别 Vue.js 是一个流行的 JavaScript 框架,用于构建单页应用程序和其他 Web 应用程序。Vue 有两个主要版本:Vue2 和 Vue3,两个版本有一些重要的区别,下面就让我们逐步了解它们。 Vue2 和 Vue3 的区别 1. 性能 在性能方面,Vue3 比 Vue2 更快,主要原因如下: Vue3…

    Vue 2023年5月28日
    00
  • 详解mpvue中使用vant时需要注意的onChange事件的坑

    如何在mpvue中使用vant组件并正确处理onChange事件,是一个容易被忽略但又十分重要的问题。以下是需要注意的要点: 问题背景 在mpvue中使用vant组件时,如v-radio-group,我们可以通过onChange事件知道用户选中了哪一个选项,组件会返回选项对应的value值。但是,在某些场景下我们需要手动清空这些选项,比如用户点击某个按钮时,…

    Vue 2023年5月28日
    00
  • 使用vue-cli创建vue2项目的实战步骤详解

    下面就是使用vue-cli创建vue2项目的实战步骤详解: 步骤一:安装node.js和npm 在使用vue-cli创建vue2项目之前,需要先安装node.js和npm,这里就不再赘述了,如果还没安装的话可以到node.js官网下载安装包进行安装。 步骤二:安装vue-cli 使用npm全局安装vue-cli,执行如下命令: npm install -g …

    Vue 2023年5月27日
    00
  • Vue前端书写规范大全(非常详细!)

    首先我们来谈谈Vue前端书写规范大全的重要性,这是因为在Vue开发中,写好规范的代码能够提高代码的可读性和可维护性,同时也能够避免很多不必要的错误和 bug,因此Vue前端书写规范大全是非常重要的。 Vue前端书写规范大全主要包括以下几个方面: 1. 文件命名规范 1.1 Vue 单文件组件命名规范 Vue 单文件组件(.vue 文件)应按照以下格式进行命名…

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