在vue3中使用el-tree-select实现树形下拉选择器效果

 更新时间:2024年03月07日 14:32:53   作者:偷只猫来养  
el-tree-select是一个含有下拉菜单的树形选择器,结合了 el-tree 和 el-select 两个组件的功能,这篇文章主要介绍了在vue3中使用el-tree-select做一个树形下拉选择器,需要的朋友可以参考下

el-tree-select是一个含有下拉菜单的树形选择器,结合了 el-tree 和 el-select 两个组件的功能。

因为包含了el-tree的功能,我们可以自定义tree的节点,创造出想要的组件

使用default插槽可以自定义节点内容,它的default插槽相当于el-tree的default插槽

<template>
    <el-tree-select
        v-model="dirCode"
        :data="treeData"
        :highlight-current="true"
        :props="defaultProps"
        clearable
        filterable
        node-key="pathCode"
        :placeholder="placeholder"
        @clear="handleClear">
        <template #default="{ node, data }">
            <div class="custom-tree-node" @click="data.pathCode !== '-1' ? handleNodeClick(data) : ''">
                <div class="tree-icon">
                	<!-- 这里的svg-icon是我自己加的,可以改成element-plus中的icon ---->
                    <svg-icon class="file" icon-class="file"></svg-icon>
                </div>
                <div class="tree-label one-line">
                    <span class="tree-label-text one-line">
                        {{ node.label }}
                    </span>
                </div>
            </div>
        </template>
    </el-tree-select>
</template>

使用:model-value="modelValue"可以在适合用组件时直接v-model绑定值
我这里使用的是setup式的语法,当然也可以使用setup()方法

<script setup>
import { ref, reactive, watch, onMounted } from 'vue'
import { getDirectory } from 'api/autoOperations/scriptManage'
const props = defineProps({
    placeholder: {
        type: String,
        default: '请选择目录',
        required: false
    },
    code: {
        type: String,
        default: '',
        required: false
    },
    path: {
        type: String,
        default: '',
        required: false
    }
})
let dirCode = ref('')
let dirPath = ref('')
const treeData = ref([])
const emits = defineEmits(['change'])
// 树状图默认配置
const defaultProps = reactive({
  children: 'children',
  label: 'pathName',
  isLeaf(data, node) {
    return data.isLeaf == 'true'
  }
})
watch(() => props.code, (val) => {
    if (val) {
        dirCode.value = val
    }
}, {
    immediate: true,
    deep: true
})
watch(() => props.path, (val) => {
    if (val) {
        dirPath.value = val
    }
}, {
    immediate: true,
    deep: true
})
onMounted(() => {
    getTreeData()
})
// 这里从数据库获取数据
const getTreeData = () => {
}
const handleNodeClick = (data) => {
    dirCode.value = data.pathCode
    dirPath.value = data.dirPath
    emits('change', {
        dirPath: dirPath.value,
        dirCode: dirCode.value
    })
}
const handleClear = () => {
    dirCode.value = ''
    dirPath.value = ''
    emits('change', {
        dirPath: dirPath.value,
        dirCode: dirCode.value
    })
}
</script>

这是我的自定义样式,用的scss

<style lang="scss" scoped>
.custom-tree-node {
    display: flex;
    justify-content: space-between;
    align-items: center;
    width: calc(100% - 24px);
    font-size: 12px;
    line-height: 24px;
    .tree-icon {
        width: 20px;
        display: flex;
        align-items: center;
        .file {
        width: 20px;
        font-size: 20px;
        vertical-align: text-bottom;
        }
    }
    .tree-label {
        width: 100%;
        height: 24px;
        line-height: 24px;
        .tree-label-text {
            display: inline-block;
            max-width: calc(100% - 30px);
        }
    }
}
</style>

最后是效果图

到此这篇关于在vue3中使用el-tree-select做一个树形下拉选择器的文章就介绍到这了,更多相关vue3树形下拉选择器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决ant Design Search无法输入内容的问题

    解决ant Design Search无法输入内容的问题

    这篇文章主要介绍了解决ant Design Search无法输入内容的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Vue实现一种简单的无限循环滚动动画的示例

    Vue实现一种简单的无限循环滚动动画的示例

    这篇文章主要介绍了Vue实现一种简单的无限循环滚动动画的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • karma+webpack搭建vue单元测试环境的方法示例

    karma+webpack搭建vue单元测试环境的方法示例

    本篇文章主要介绍了karma+webpack搭建vue单元测试环境的方法示例,这次搭建的测试环境和开发环境隔离,所以理论上适用所有使用vue的开发环境。感兴趣的小伙伴们可以参考一下
    2018-05-05
  • vue.config.js中配置分包策略及常见的配置选项

    vue.config.js中配置分包策略及常见的配置选项

    在Vue.js中分包(Code Splitting)是一种将应用程序代码拆分为不同的块或包的技术,从而在需要时按需加载这些包,下面这篇文章主要给大家介绍了关于vue.config.js中配置分包策略及常见的配置选项的相关资料,需要的朋友可以参考下
    2024-02-02
  • Vue3开发右键菜单的示例详解

    Vue3开发右键菜单的示例详解

    右键菜单在项目开发中是属于比较高频的组件了,所以这篇文章小编主要来和大家介绍一下如何利用vue3开发一个右键菜单,有需要的可以参考下
    2024-03-03
  • 一文带你搞懂Vue.js如何实现全选反选功能

    一文带你搞懂Vue.js如何实现全选反选功能

    这篇文章主要为大家详细介绍了Vue.js实现全选反选功能的相关知识,文中是示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下
    2025-01-01
  • element用脚本自动化构建新组件的实现示例

    element用脚本自动化构建新组件的实现示例

    本文主要介绍了element-ui的用脚本自动化构建新组件的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Vue前端项目部署IIS的实现

    Vue前端项目部署IIS的实现

    这篇文章主要介绍了Vue前端项目部署IIS的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • vue3中Teleport的用法以及使用场景小结

    vue3中Teleport的用法以及使用场景小结

    Teleport是一个内置组件,它可以将一个组件内部的一部分模板传送到该组件的 DOM 结构外层的位置去,本文主要介绍了Vue3中Teleport用法以及使用场景小结,感兴趣的可以了解一下
    2025-04-04
  • Vue使用Pinia轻松实现状态管理

    Vue使用Pinia轻松实现状态管理

    pinia,一个基于Vue3的状态管理库,它可以帮助开发人员管理Vue应用程序的状态,本文主要为大家介绍了Pinia的用法,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06

最新评论