elementui Select选择器嵌套tree实现TreeSelect方式

 更新时间:2023年10月08日 14:46:09   作者:向钱看`向厚赚  
这篇文章主要介绍了elementui Select选择器嵌套tree实现TreeSelect方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

个人实现记录

  • 效果 可以设置默认要展开和勾选的状态
  • 点击select里的标签 关闭树形图对应的取消勾选效果

html

<el-select v-model="value1" multiple placeholder="请选择" @change="changeData">
      <el-option style="height:auto" :value="SelectedArray">
        <el-tree
          :data="dataList"
          show-checkbox
          node-key="id"
          ref="tree"
          :check-strictly="true"
          highlight-current
          :props="defaultProps"
          @check="checkClick"
          :default-expanded-keys="setkey"
          :default-expand-all="false"
        >
        </el-tree>
      </el-option>
    </el-select>
  • default-expand-all 是否默认展开所有节点
  • default-expanded-keys 默认展开的节点的 key 的数组
  • check 当复选框被点击的时候触发
  • -check-strictly 父子节点不相互关联
  • highlight-current 是否高亮当前选中节点,默认值是 false。

代码部分

 data () {
    return {
      setkey: [1], // 默认展开节点
      dateList: [], // 遍历用
      SelectedArray: [12, 13], // 选中的数组
      dataList: [
        {
          id: 1,
          name: '总公司',
          parent_id: null,
          parent_name: null,
          has_children: true,
          children: [
            {
              id: 2,
              name: '1xxxx部门',
              parent_id: 1,
              parent_name: '总公司',
              has_children: true,
              children: [
                {
                  id: 12,
                  name: 'x1x项目',
                  parent_id: 1,
                  parent_name: '1xxxx部门',
                  has_children: false,
                  children: []
                },
                {
                  id: 13,
                  name: 'x22222x项目',
                  parent_id: 2,
                  parent_name: '1xxxx部门',
                  has_children: true,
                  children: [
                    {
                      id: 19,
                      name: 'xxx',
                      parent_id: 13,
                      parent_name: 'x22222x项目',
                      has_children: false,
                      children: []
                    }
                  ]
                }
              ]
            },
            {
              id: 15,
              name: '管理办公室',
              parent_id: 1,
              parent_name: '总公司',
              has_children: false,
              children: []
            },
            {
              id: 16,
              name: '技术中心',
              parent_id: 1,
              parent_name: '总公司',
              has_children: false,
              children: []
            }
          ]
        }
      ], // tree数据
      value1: [], // select绑定的值
      // 对应的字段
      defaultProps: {
        children: 'children',
        label: 'name'
      }
    }
  },
<script>
// highlight-current是否高亮当前选中节点,默认值是 false。
  methods: {
    async getTreeData () {
      try {
        const {
          data: { data }
        } = await this.$http.get('http://localhost:8848/treeData')
        console.log(data)
        this.dataList = data.data_list
        console.log(this.dataList)
      } catch (error) {
        console.log(error)
      }
    },
    changeData (e) {
      console.log('选中改变的值', e, this.dateList)
      const setkey = []
      for (let index = 0; index < this.dateList.length; index++) {
        for (let index1 = 0; index1 < e.length; index1++) {
          if (this.dateList[index].name === e[index1]) {
            setkey.push(this.dateList[index].id)
          }
        }
      }
      console.log(setkey)
      this.setkey = setkey
      // 重新 设置tree
      this.$refs.tree.setCheckedKeys(this.setkey)
    },
    // 点击树形图复选框触发 
    checkClick (checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys) {
      //   console.log(checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys)
      //   点击了复选框 使用this.$refs.tree.getCheckedNodes获取当前选中的节点
      const res = this.$refs.tree.getCheckedNodes(false, true) // 这里两个true,1. 是否只是叶子节点 2. 是否包含半选节点(就是使得选择的时候不包含父节点)
      console.log('点击树形图获取当前选中的节点', res)
      this.dateList = res
      const labelArr = []
      const valueArr = []
      res.forEach((element, index) => {
        labelArr.push(element.name)
        valueArr.push(element.id)
      })
      this.value1 = labelArr // select显示的数据
      this.SelectedArray = valueArr // 我要发送给后端的数据
      console.log(this.value1, this.SelectedArray)
    }
  },
  created () {
  //获取tree数据  data里面写了
    // this.getTreeData() 
  },
  // 默认选中树形图的复选框  回显的操作
  mounted () {
    this.$refs.tree.setCheckedKeys(this.setkey)
  }
}
</script>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue封装的Tag标签双击编辑单击选中可删除

    vue封装的Tag标签双击编辑单击选中可删除

    项目中需要制作一个双击编辑单击选中可删除Tag标签,本文就来介绍一下如何实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • vue+element UI中如何给指定日期添加标记

    vue+element UI中如何给指定日期添加标记

    这篇文章主要介绍了vue+element UI中如何给指定日期添加标记问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 在Vue中获取自定义属性方法:data-id的实例

    在Vue中获取自定义属性方法:data-id的实例

    这篇文章主要介绍了在Vue中获取自定义属性方法:data-id的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • vue利用vue meta info设置每个页面的title与meta信息

    vue利用vue meta info设置每个页面的title与meta信息

    这篇文章主要给大家介绍了关于vue如何利用vue meta info设置每个页面的title与meta信息的相关资料,文中将实现的方法介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友可以参考下
    2021-10-10
  • vue实现路由跳转动态title标题信息

    vue实现路由跳转动态title标题信息

    这篇文章主要介绍了vue实现路由跳转动态title标题信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 解决vue项目,npm run build后,报路径错的问题

    解决vue项目,npm run build后,报路径错的问题

    这篇文章主要介绍了解决vue项目,npm run build后,报路径错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue完美实现el-table列宽自适应

    vue完美实现el-table列宽自适应

    这篇文章主要介绍了vue完美实现el-table列宽自适应,对vue感兴趣的同学,可以参考下
    2021-05-05
  • el-tree的实现叶子节点单选的示例代码

    el-tree的实现叶子节点单选的示例代码

    本文主要介绍了el-tree的实现叶子节点单选的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • vue如何监听对象或者数组某个属性的变化详解

    vue如何监听对象或者数组某个属性的变化详解

    这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通过监听器函数接收新旧值,实现属性间的数据联动,需要的朋友可以参考下
    2024-12-12
  • Vue3+TypeScript实现Docx/Excel预览组件

    Vue3+TypeScript实现Docx/Excel预览组件

    这篇文章主要为大家详细介绍了如何使用Vue3+TypeScript实现Docx/Excel预览组件,文中的示例代码讲解详细,有需要的小伙伴可以参考下
    2024-04-04

最新评论