基于vue2.0实现的级联选择器


Posted in Javascript onJune 09, 2017

基于Vue的级联选择器,可以单项,二级, 三级级联,多级级联

web开发中我们经常会遇到级联选择器的问题,尤其是在表单中,无外乎几种情况:

  1. 单个级联 (下拉选择框,单选)
  2. 单个级联 (多项选择)
  3. 二级联动 (省份和城市联动)
  4. 三级联动 (省市区联动)

在jquery中有很多好用的插件,比如select2, 单选,多选的功能都具备。

本文探讨一下在vue中的实现级联选择器,自己在项目中碰到过以下两种情况的后端数据,查阅资料后也证实了这两种数据的合理性:

预览地址

github地址

1 后端处理数据逻辑

这种情况是比较推荐的,大量的数据运算放在后端来进行,只需前后端商量好数据格式即可

一般的数据格式可能如下:

[{
 value: 'beijing',
 label: '北京',
 children: [{
  value: 'chaoyang',
  label: '朝阳'
 }, {
  value: 'haidian',
  label: '海淀'
 }, {
  value: 'changping',
  label: '昌平'
 }, {
  value: 'shunyi',
  label: '顺义'
 }]
}, {
 value: 'shanghai',
 label: '上海',
 children: [{
  value: 'baoshan',
  label: '宝山'
 }, {
  value: 'jiading',
  label: '嘉定'
 }, {
  value: 'songjiang',
  label: '松江'
 }, {
  value: 'pudong',
  label: '浦东'
 }]
}]

特点:数据之间层级嵌套,上下级的关系很清晰

2 前端处理数据逻辑

这种情况适合数据量较小的数据,或者由于某种原因后端只能返给你这种数据,那所有的数据处理就需要前端来操作,最终拼成的格式也与上述情况类似,只不过是多几个或少几个字段的问题。

数据格式可能会是这样:

[{
 code: 420000,
 name: '湖北省',
 parentCode: 0
},
{
 code: 420100,
 name: '武汉市',
 parentCode: 420000
},
{
 code: 420101,
 name: '市辖区',
 parentCode: 420100
},
{
 code: 420102,
 name: '江岸区',
 parentCode: 420100
},
{
 code: 420103,
 name: '江汉区',
 parentCode: 420100
},
{
 code: 420104,
 name: '?口区',
 parentCode: 420100
},
{
 code: 420105,
 name: '汉阳区',
 parentCode: 420100
},
{
 code: 421000,
 name: '荆州市',
 parentCode: 420000
},
{
 code: 421001,
 name: '市辖区',
 parentCode: 421000
},
{
 code: 421002,
 name: '沙市区',
 parentCode: 421000
},
{
 code: 421003,
 name: '荆州区',
 parentCode: 421000
},
{
 code: 430000,
 name: '湖南省',
 parentCode: 0
},
{
 code: 430100,
 name: '长沙市',
 parentCode: 430000
},
{
 code: 430101,
 name: '市辖区',
 parentCode: 430100
},
{
 code: 430102,
 name: '芙蓉区',
 parentCode: 430100
},
{
 code: 430103,
 name: '天心区',
 parentCode: 430100
},
{
 code: 430104,
 name: '岳麓区',
 parentCode: 430100
}]

特点:数据格式是个平面表,每一条数据中都带有与之相对应的上下级关系。当我们查看某个数据的上下级时,都需要重新去遍历一遍数据。

如何在组件中使用

<div class="hello">
 <form-organization :organization="organization" v-model="seleted"></form-organization>
</div>

<script>
import FormOrganization from '@/components/FormOrganization'
export default {
 name: 'hello',
 data () {
  return {
   seleted: [],
   organization: [{
    value: 'beijing',
    label: '北京'
   }, {
    value: 'shanghai',
    label: '上海'
   }, {
    value: 'shenzhen',
    label: '深圳'
   }, {
    value: 'hangzhou',
    label: '杭州'
   }, {
    value: 'zhengzhou',
    label: '郑州'
   }, {
    value: 'guangzhou',
    label: '广州'
   }, {
    value: 'xiamen',
    label: '厦门'
   }]
  }
 },
 components: {
  FormOrganization
 }
}
</script>

API

props type description
origanization Array 级联数据源,格式必须按照第一种数据中的格式显示
value Array 选中中或默认值,可以直接用v-model语法糖,具体可以查看例子

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

Javascript 相关文章推荐
Jquery 学习笔记(一)
Oct 13 Javascript
JavaScript的单例模式 (singleton in Javascript)
Jun 11 Javascript
添加JavaScript重载函数的辅助方法2
Jul 04 Javascript
jQuery实现购物车多物品数量的加减+总价计算
Jun 06 Javascript
详解Javascript动态操作CSS
Dec 08 Javascript
Node.js实现批量去除BOM文件头
Dec 20 Javascript
javascript实现验证身份证号的有效性并提示
Apr 30 Javascript
jQuery插件制作之参数用法实例分析
Jun 01 Javascript
关于JavaScript的变量的数据类型的判断方法
Aug 14 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
Dec 28 Javascript
JavaScript实现多个物体同时运动
Mar 12 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 Javascript
JavaScript设计模式之代理模式详解
Jun 09 #Javascript
vue.js+Echarts开发图表放大缩小功能实例
Jun 09 #Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 #Javascript
JS创建Tag标签的方法详解
Jun 09 #Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
Jun 09 #Javascript
JS实现的随机排序功能算法示例
Jun 09 #Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
Jun 09 #jQuery
You might like
用PHP实现多级树型菜单
2006/10/09 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
javascript动态修改Li节点值的方法
2015/01/20 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
如何编写jquery插件
2017/03/29 jQuery
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
python生成日历实例解析
2014/08/21 Python
python进阶教程之异常处理
2014/08/30 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
Python检测数据类型的方法总结
2019/05/20 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
Python 解析xml文件的示例
2020/09/29 Python
python如何对链表操作
2020/10/10 Python
python绘制雷达图实例讲解
2021/01/03 Python
生物制药毕业生自荐信
2013/10/16 职场文书
大学社团招新的通讯稿
2014/09/10 职场文书
创卫工作总结2015
2015/04/22 职场文书
实验室安全管理制度
2015/08/05 职场文书
php字符串倒叙
2021/04/01 PHP
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
nginx 配置指令之location使用详解
2022/05/25 Servers