el-select和el-tree结合使用-树形结构多选框
阅读数:299 评论数:0
跳转到新版页面分类
html/css/js
正文
一、基本思路
通过el-tree来选择所需要的节点和获取数据,将el-select的选择关闭,防止点击时报错,通过el-tree获取的数据来关联el-select并渲染输入框的内容,而不是通过option来获取数据,所以el-option的状态为disabled
二、实现
1、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>
popper-append-to-body | 是否将弹出框插入至body元素。在弹出框的定位出现问题时,可将该属性设置为false。 |
show-checkbox | 节点是否可被选择。 |
check-strictly | 在显示复选框的情况下,是否严格遵循父子不互相关联的做法,默认为false。 |
expand-on-click-node | 是否在点击节点的时候展开或者收缩节点,默认为true,如果为false,则只有点箭头图标的时候才会展开或收缩节点。 |
check-on-click-node | 是否在点击节点的时候选中节点,默认为false,即只在点击复选框时才会选中节点。 |
remove-tag | 多选模式下移除tag时触发 |
collapse-tags | 多选时是否将选中值按文字的形式展示。 |
2、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) {
// 获取选择中的节点
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>
(1)getCheckedNodes
若节点可被选择(即show-checkbox为true),则返回目前被选中的节点所组成的数组。
(leafOnly, includeHalfChecked)接收两个boolean类型的参数,leafOnly表示是否只是叶子节点,默认值为false,第二个参数表示是否包含半选节点,默认值为false。
(2)setCheckedNodes
设置目前勾选的节点,使用此方法必须设置node-key属性。
3、css 纠正样式问题,其中cursor修改禁用后的鼠标状态
.setstyle {
min-height: 200px;
padding: 0 !important;
margin: 0;
overflow: auto;
cursor: default !important;
}
4、关于check-strictly引发的问题
1.设置:tree复选框 check-strictly = false(默认) 父子关联:
选中父级,勾选所有子选项;取消父级选中,同时取消子选项勾选
选中子选项,父选项变为半选中状态,如果勾选所有子选项,父选项为选中状态
2.设置:tree复选框 check-strictly = true 父子无关联,出现:
父级的选中和取消选中,都不会对子选项的状态有任何的影响
子选项的选中和取消,都不会对父选项的状态有任何的影响
相关推荐
1、安装依赖
npm install svg-sprite-loader --save-dev
2、配置build文件夹中的webpack.base.conf.js
3、在src/component
在列表渲染时使用key属性
当Vue.js用v-for正在更新已渲染过的元素列表时,它默认用“就地复用”策略,如果数据项的顺序被改变,Vue将不会移动D
一、vue.js devtools开发工具的使用
1、安装
在chrome或firefox浏览器的扩展插件仓库里搜索vue devtool。
2、debugger的使用
假设我们想调试App.vue这
ref被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的$refs对象上。如果在普通的DOM元素上使用,引用指向的就是DOM元素,如果用在子组件上,引用就指向组件实例。
<!-- `vm.$
在使用Vue中经常看到HTML中有标签属性前面添加了“:”,有些没有。
其实是v-bind的缩写。
v-bind
缩写: ‘:’
用法:动态绑定一个或多个特性,或一个组件prop到表达式。在绑定cl
一、概述
Vuex是一个专门为Vue.js应用程序开发的全局状态管理功能。它采用集中式存储管理应用的所有组件的状态, 并以相应的规则保证状态以一种可预测的方式发生变化。
每一个Vuex应用的核心就是s