android系统定制开发el-select和el-tree结合使用-树形结构多选框

android系统定制开发接上篇文章需求,android系统定制开发选择的时候有多选的情况,android系统定制开发用上一篇的单选并不能解决问题,下图是这次达到的效果

话不多说,上代码

html

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

js

  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. value:[],
  6. selectTree:[],
  7. defaultProps:{
  8. children: 'children',
  9. label: 'label'
  10. },
  11. list: [{
  12. id: 1,
  13. label: '一级 2',
  14. children: [{
  15. id: 3,
  16. label: '二级 2-1',
  17. children: [{
  18. id: 4,
  19. label: '三级 3-1-1'
  20. }, {
  21. id: 5,
  22. label: '三级 3-1-2',
  23. }]
  24. }, {
  25. id: 2,
  26. label: '二级 2-2',
  27. children: [{
  28. id: 6,
  29. label: '三级 3-2-1'
  30. }, {
  31. id: 7,
  32. label: '三级 3-2-2',
  33. }]
  34. }]
  35. }],
  36. }
  37. },
  38. methods: {
  39. handleNodeClick(data,self,child) {
  40. console.log(this.$refs.tree.getCheckedNodes())
  41. let datalist = this.$refs.tree.getCheckedNodes()
  42. this.selectTree = [] //置空
  43. this.value = []
  44. datalist.forEach((item)=>{
  45. this.selectTree.push({id:item.id,label:item.label})
  46. this.value.push(item.label)
  47. })
  48. },
  49. removetag(){
  50. this.selectTree.splice(0,1)
  51. let setlist = this.$refs.tree.getCheckedNodes()
  52. setlist.splice(0,1)
  53. this.$nextTick(() => {
  54. this.$refs.tree.setCheckedNodes(setlist)
  55. })
  56. },
  57. clearall(){
  58. this.selectTree = []
  59. this.$nextTick(() => {
  60. this.$refs.tree.setCheckedNodes([])
  61. })
  62. },
  63. },
  64. }
  65. </script>

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

  1. .setstyle {
  2. min-height: 200px;
  3. padding: 0 !important;
  4. margin: 0;
  5. overflow: auto;
  6. cursor: default !important;
  7. }

思路:通过来选择所需要的节点和获取数据,将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 元素。在弹出框的定位出现问题时,可将该属性设置为 falseboolean
show-checkbox节点是否可被选择boolean
check-strictly在显示复选框的情况下,是否严格的遵循父子不互相关联的做法,默认为 falseboolean
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)来进行删除。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发