el-select与el-tree结合使用实现树形结构多选框

目录
  • 前言
  • 话不多说,上代码
  • 思路:
  • 重点:
  • 总结

前言

接上篇文章需求,选择树形结构的时候有多选的情况,用上一篇的单选并不能解决问题,下图是这次达到的效果

话不多说,上代码

html

<el-select v-model="value" multiple placeholder="请选择" :popper-append-to-body="false"
    @remove-tag="removetag"  collapse-tags @clear="clearall" clearable >
    <el-option :value="selectTree" class="setstyle" disabled>
		<el-tree :data="list" :props="defaultProps" ref="tree"
		show-checkbox check-strictly :expand-on-click-node="false" node-key="id"
		check-on-click-node @check-change="handleNodeClick"></el-tree>
	</el-option>
</el-select>

js

<script>
	export default {
		data() {
			return {
				value:[],
				selectTree:[],
				defaultProps:{
					children: 'children',
					label: 'label'
				},
				list: [{
					id: 1,
					label: '一级 2',
					children: [{
						id: 3,
						label: '二级 2-1',
						children: [{
							id: 4,
							label: '三级 3-1-1'
						}, {
							id: 5,
							label: '三级 3-1-2',
						}]
					}, {
						id: 2,
						label: '二级 2-2',
						children: [{
							id: 6,
							label: '三级 3-2-1'
						}, {
							id: 7,
							label: '三级 3-2-2',
						}]
					}]
				}],
			}
		},
		methods: {
			handleNodeClick(data,self,child) {
				console.log(this.$refs.tree.getCheckedNodes())
				let datalist = this.$refs.tree.getCheckedNodes()
				this.selectTree = [] //置空
				this.value = []
				datalist.forEach((item)=>{
					this.selectTree.push({id:item.id,label:item.label})
					this.value.push(item.label)
				})
			},
            removetag(){
				this.selectTree.splice(0,1)
				let setlist = this.$refs.tree.getCheckedNodes()
				setlist.splice(0,1)
				this.$nextTick(() => {
					this.$refs.tree.setCheckedNodes(setlist)
				})
			},
			clearall(){
				this.selectTree = []
				this.$nextTick(() => {
					this.$refs.tree.setCheckedNodes([])
				})
			},
		},
	}
</script>

css   纠正样式问题,其中cursor修改禁用后的鼠标状态,

.setstyle {
	min-height: 200px;
	padding: 0 !important;
	margin: 0;
	overflow: auto;
	cursor: default !important;
}

思路:

通过el-tree来选择所需要的节点和获取数据,将el-select的选择关闭,防止点击时报错,通过el-tree获取的数据来关联el-select并渲染输入框的内容,而不是通过option来获取数据(所以el-option的状态时disabled)。

重点:

1.this.$refs.tree.getCheckedNodes() 获取选中的节点

2.cursor:default  修改鼠标状态

3.check-change 节点选中状态发生变化时触发

涉及内容:

popper-append-to-body 是否将弹出框插入至 body 元素。在弹出框的定位出现问题时,可将该属性设置为 false boolean
show-checkbox 节点是否可被选择 boolean
check-strictly 在显示复选框的情况下,是否严格的遵循父子不互相关联的做法,默认为 false boolean
expand-on-click-node 是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点。 boolean
check-on-click-node 是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点。 boolean

第二版修改

在之前的基础上进行了优化,增加了删除的功能,

原来的删除中,数组件不会跟随修改,这次优化后,使组件功能更加完善。

思路:

通过删除已选模块时触发的方法,对树组件中数据选择情况进行重新修改渲染,触发清空时,将已选数据置空,并且把树组件中已选项全部修改为未选。

涉及内容:

getCheckedNodes 若节点可被选择(即 show-checkbox 为 true),则返回目前被选中的节点所组成的数组 (leafOnly, includeHalfChecked) 接收两个 boolean 类型的参数,1. 是否只是叶子节点,默认值为 false 2. 是否包含半选节点,默认值为 false
setCheckedNodes 设置目前勾选的节点,使用此方法必须设置 node-key 属性 (nodes) 接收勾选节点数据的数组
node-key 每个树节点用来作为唯一标识的属性,整棵树应该是唯一的 String
remove-tag 多选模式下移除tag时触发 移除的tag值
clear 可清空的单选模式下用户点击清空按钮时触发
collapse-tags 多选时是否将选中值按文字的形式展示 boolean

设置collapse-tags后,展示效果:

上图箭头所指向的模块是通过getCheckedNodes获取到的列表中的第一个元素,所以上面删除方法中使用了splice(0,1)来进行删除。

总结

到此这篇关于el-select与el-tree结合使用实现树形结构多选框的文章就介绍到这了,更多相关el-select el-tree树形结构多选框内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • element-ui中实现tree子节点部分选中时父节点也选中

    目录 子节点部分选中时父节点也选中 el-tree数据回显时子节点部分选中,父节点都全选中的坑 我这里用getNode()的方法来简单解决 子节点部分选中时父节点也选中 如果需求是:选中任何一个子节点都默认选择父节点,怎么办? 其实,element-ui也提供了方案,常规下,如果子节点选中,那么这时父节点是半选中状态,在获取选中值时,只需要利用**getHalfCheckedKeys()+getCheckedKeys()**两个方法即可达到效果.  let zi = this.$refs.tre

  • Element UI框架中巧用树选择器的实现

    本文介绍了Element UI框架中巧用树选择器的实现,分享给大家,顺便给自己留个笔记,具体如下: 介绍 在Element UI框架中有选择器和树形控件,但是没有树形选择器,也就是图上的这种方式的选择器,所以只能自定义选择器的slot.这里介绍的是多选情况,如果是单选则去掉复选框,修改一部分的处理即可. html部分的代码: <el-select v-model="dataArr" :multiple="multiple" filterable :placeh

  • PHP树形结构tree类用法示例

    本文实例讲述了PHP树形结构tree类用法.分享给大家供大家参考,具体如下: <?php include 'tree.class.php'; //模拟数据库 $data=array( array('id'=>1,'pid'=>0,'name'=>'一级栏目一'), array('id'=>2,'pid'=>0,'name'=>'一级栏目二'), array('id'=>3,'pid'=>1,'name'=>'二级栏目一'), array('id'

  • Java带复选框的树(Java CheckBox Tree)实现和应用

    在使用Java Swing开发UI程序时,很有可能会遇到使用带复选框的树的需求,但是Java Swing并没有提供这个组件,因此如果你有这个需求,你就得自己动手实现带复选框的树. CheckBoxTree与JTree在两个层面上存在差异: 1.在模型层上,CheckBoxTree的每个结点需要一个成员来保存其是否被选中,但是JTree的结点则不需要. 2.在视图层上,CheckBoxTree的每个结点比JTree的结点多显示一个复选框. 既然存在两个差异,那么只要我们把这两个差异部分通过自己的实

  • jquery select多选框的左右移动 具体实现代码

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv=&quo

  • Vue.js 中的 v-model 指令及绑定表单元素的方法

    我们可以使用 Vue.js 中的 v-model 指令来完成表单数据的双向绑定. 1 基础用法 1.1 文本输入框(text) 这里演示了在文本输入框上输入的内容,会实时映射到绑定的数据上. html: <div id="app"> <input type="text" v-model="content" placeholder="请输入"> <p>输入框:{{content}}</p

  • JQuery.validationEngine表单验证插件(推荐)

     一.说明 jQuery.validationEngine表单验证控件功能强大,自带了样式显示模式: 1.字符类型:非空验证.最大长度.最小长度.相等判断.数字和空格.数字和英文字母 2.数字类型:数字.整数.最大值.最小值 3.日期类型:日期(yyyy-MM-dd/ yyyy/MM/dd等).日期+时间.最小日期.最大日期.日期时间段 4.业务字段:url.email.phone.ipv4:ciaoca版扩展支持:qq.邮政编码.身份证.汉字. 5.Ajax后台验证:支持全局扩展定义,后台可定

  • jQuery的插件列表(2010-1-25更新)

    jQuery Scroll Follow   随屏幕滚动的层       点击查看Demo jScrollPane 自定义滚动条插件   点击查看Demo jQuery树状菜单插件 jqueryflexselect下拉框自动提示 jQuery id标签 - 8种不同的很酷的JQuery菜单例子 jQuery ContextMenu:轻量级JQuery插件,可以自定义右键弹出的菜单 jQuery Flash Plugin-这个 jQuery插件可以让你嵌入Flas***** jQuery Medi

  • Linux企业运维人员常用的150个命令分享

    本文将向大家介绍Linux企业运维人员常用的150个命令,如有不足之处,还望海涵.当然更希望大家留言指出.希望对大家有所帮助! 命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂的还有info,但不常用. help 查看Linux内置命令的帮助,比如cd命令. 文件和目录操作命令(18个) ls 全拼list,功能是列出目录的内容及其内容属性信息. cd 全拼change directory,功能是从当前工作目录切换到指定的工作目录. cp 全拼copy,其功能

  • 使用ExtJS技术实现的拖动树结点

    一.结点拖放的位置 拖放结点包含了两个动作,拖(drag)和放(drop).拖很好理解,就是将结点拖起来,拖哪一个结点的效果都是一样的.不过放结点就比较复杂了.放结点可分为如下两种情况: 追加(append)结点:如果将拖动的结点正好放在非叶子结点的上面,TreePanel组件会将这个结点移动到非叶子结点下面作为该结点的子结点.由于TreePanel的限制,叶子结点不能append. 在同一层做上下移动(above和below): 如果将拖动的结点放在叶子结点上,或放在非叶子结点的侧面,会将拖动

  • 深入浅析PHP无限极分类的案例教程

    平时开发中或多或少不可避免会遇到无限极分类的问题,因为效率.逻辑等问题也一直使这类问题比较尖锐.今天我们以yii2框架为基础,栏目无限极为例,对这个问题进行一个简单的处理. 首先我们有一张栏目数据表 tree 表结构如下图(原文有图) 看上去表结构很简单. 我们插入几条测试数据 INSERT INTO `tree` (`id`, `parent_id`, `name`) VALUES (1, 0, 'A'), (2, 0, 'B'), (3, 1, 'a'), (4, 3, 'aa'), (5,

  • java实现构造无限层级树形菜单

    这里来讲一下后台java如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了. 我们来理一下如何实现构造多叉树的逻辑吧,其实整个问题概括起来就是 1.构造一个实体类,用来存储节点,所以我们构造的需要四个对象(id,pid,name,和chirenList) 2.构造菜单结构 3.构造子菜单,如此循环,通过pid判断上级菜单 具体实现: 1.这里构造Tree.java实体类 package com.tcl.jr.crm.entity; /** * 类名称:Tree * 类描述:树形结构 */

随机推荐