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


Posted in Javascript onOctober 29, 2019

本文介绍了vue + elementUI实现省市县三级联动的方法示例,分享给大家,具体如下:

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

1、首先需要准备省市县json文件,网上有很多可以下载。项目中使用的city.json数据是这样的格式:

[
 {
  "value": "110000",
  "label": "北京市",
  "children": [
   {
    "value": "110000",
    "label": "北京市",
    "children": [
     {
      "value": "110101",
      "label": "东城区"
     },
     {
      "value": "110102",
      "label": "西城区"
     },
     {
      "value": "110105",
      "label": "朝阳区"
     },
     {
      "value": "110106",
      "label": "丰台区"
     },
     {
      "value": "110107",
      "label": "石景山区"
     },
     {
      "value": "110108",
      "label": "海淀区"
     },
     {
      "value": "110109",
      "label": "门头沟区"
     },
     {
      "value": "110111",
      "label": "房山区"
     },
     {
      "value": "110112",
      "label": "通州区"
     },
     {
      "value": "110113",
      "label": "顺义区"
     },
     {
      "value": "110114",
      "label": "昌平区"
     },
     {
      "value": "110115",
      "label": "大兴区"
     },
     {
      "value": "110116",
      "label": "怀柔区"
     },
     {
      "value": "110117",
      "label": "平谷区"
     },
     {
      "value": "110118",
      "label": "密云区"
     },
     {
      "value": "110119",
      "label": "延庆区"
     }
    ]
   }
  ]
 },
 {
  "value": "120000",
  "label": "天津市",
  "children": [
   {
    "value": "120000",
    "label": "天津市",
    "children": [
     {
      "value": "120101",
      "label": "和平区"
     },
     ......

2、创建一个组件开始写代码

<template>
 <div class="linkage">
  <div>
   <el-select v-model="selectProvince" filterable size="small" @change="selectProvinceFun($event)" placeholder="请选择省份">
    <el-option value="" label="请选择省份"></el-option>
    <el-option :value="item" :label="item.label" v-for="(item, index) in city" :key="index"></el-option>
   </el-select>
  </div>
  <div>
   <el-select v-model="selectCity" filterable size="small" @change="selectCityFun($event)" placeholder="请选择城市">
    <el-option value="" label="请选择城市"></el-option>
    <el-option :value="item" :label="item.label" v-for="(item, index) in cityList" :key="index"></el-option>
   </el-select>
  </div>
  <div>
   <el-select v-model="selectArea" filterable size="small" @change="selectAreaFun($event)" placeholder="请选择区县">
    <el-option value="" label="请选择区县"></el-option>
    <el-option :value="item" :label="item.label" v-for="(item, index) in areaList" :key="index"></el-option>
   </el-select>
  </div>
 </div>
</template>
<script>
import city from '@/assets/json/city.json'
export default {
 name: 'linkage',
 data () {
  return {
   // 整个省市县数据
   city: city,
   // 被选中的市数据
   cityList: [],
   // 被选中的县数据
   areaList: [],
   selectProvince: {},
   selectCity: {},
   selectArea: {}
  }
 },
 mounted () {
 },
 methods: {
  // 省份 市 县联动
  selectProvinceFun (event) {
   console.log(event)
   if (event) {
    this.cityList = event.children
   } else {
    this.cityList = []
   }
   this.areaList = []
   this.$emit('getLawyerListInfo', [event.label, 'province'])
  },
  selectCityFun (event) {
   console.log(event)
   if (event) {
    this.areaList = event.children
   } else {
    this.areaList = []
   }
   this.$emit('getLawyerListInfo', [event.label, 'city'])
  },
  selectAreaFun (event) {
   console.log(event)
   this.$emit('getLawyerListInfo', [event.label, 'area'])
  }
 }
}
</script>
<style lang="scss" scoped>
 .linkage {
  display: flex;
  div {
   margin-right: 5px;
  }
 }
</style>

总结:整个过程很简单,就是在选中省的时候获取他的所有children节点数据(市)在选择市的时候获取她的所有children节点数据(区县)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使两个iframe的高度与内容自适应,且相等
Nov 20 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
Jan 04 Javascript
javascript的数据类型、字面量、变量介绍
May 23 Javascript
jQuery内容过滤选择器用法分析
Feb 10 Javascript
JS模拟bootstrap下拉菜单效果实例
Jun 17 Javascript
jquery实用技巧之输入框提示语句
Jul 28 Javascript
jQuery之动画效果大全
Nov 09 Javascript
详解vue2父组件传递props异步数据到子组件的问题
Jun 29 Javascript
vue.js实现刷新当前页面的方法教程
Jul 05 Javascript
百度小程序之间的页面通信过程详解
Jul 18 Javascript
JavaScript设计模式之策略模式实现原理详解
May 29 Javascript
Javascript中window.name属性详解
Nov 19 Javascript
vue 强制组件重新渲染(重置)的两种方案
Oct 29 #Javascript
javascript实现简单打字游戏
Oct 29 #Javascript
简单使用webpack打包文件的实现
Oct 29 #Javascript
vue 解决异步数据更新问题
Oct 29 #Javascript
VUE实现强制渲染,强制更新
Oct 29 #Javascript
js实现贪吃蛇小游戏
Oct 29 #Javascript
浅谈vue异步数据影响页面渲染
Oct 29 #Javascript
You might like
基于PHP文件操作的详解
2013/06/05 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
php实现根据url自动生成缩略图的方法
2014/09/23 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
js加解密 脚本解密
2008/02/22 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
Python 复平面绘图实例
2019/11/21 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
Python装饰器结合递归原理解析
2020/07/02 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
世界经理人咨询有限公司面试
2014/09/23 面试题
仓管员岗位职责
2015/02/03 职场文书
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android