VbenTree 用法说明

VbenTree 是 Vben5 中基于 radix-vue 实现的树形组件,支持单选、多选、展开/折叠、权限控制等功能。以下是其核心用法说明:

1. 基础引入
import { VbenTree } from '@vben-core/shadcn-ui';
2. 核心属性(Props)
属性名类型说明默认值
treeDataRecordable<any>[]树形结构数据-(必填)
valueFieldstring节点值字段名(用于标识节点唯一性)'value'
labelFieldstring节点显示文本字段名'label'
childrenFieldstring子节点字段名'children'
multipleboolean是否支持多选false
checkStrictlyboolean是否取消父子节点关联(独立选择)false
autoCheckParentboolean非严格模式下,是否自动选中父节点true
defaultExpandedKeysArray<number/string>默认展开的节点 key 数组[]
defaultExpandedLevelnumber默认展开的层级(优先级高于 defaultExpandedKeys0
disabledboolean是否禁用整个树false
disabledFieldstring节点禁用状态的字段名'disabled'
borderedboolean是否显示边框false
showIconboolean是否显示节点图标(通过 iconField 指定字段)true
iconFieldstring节点图标字段名'icon'
3. 事件(Events)
事件名回调参数说明
select(item: FlattenedItem) => void节点选中状态变化时触发
expand(item: FlattenedItem) => void节点展开/折叠状态变化时触发
4. 插槽(Slots)
插槽名说明参数
node自定义节点内容{ value: 节点数据, level: 层级 }
header树顶部的自定义内容-
5. 示例代码
<template>
  <VbenTree
    v-model="selectedKeys"
    :tree-data="treeData"
    :multiple="true"
    :check-strictly="false"
    label-field="name"
    value-field="id"
    children-field="children"
    @select="handleSelect"
  >
    <template #node="{ value }">
      <span>{{ value.name }}</span>
      <span v-if="value.size" class="ml-2 text-gray-500">({{ value.size }})</span>
    </template>
  </VbenTree>
</template>

<script lang="ts" setup>
import { ref } from 'vue';
import { VbenTree } from '@core/ui-kit/shadcn-ui/src/ui/tree';

// 示例数据
const treeData = ref([
  {
    id: 1,
    name: '文件夹1',
    children: [
      { id: 11, name: '文件1-1', size: '10KB' },
      { id: 12, name: '文件1-2', size: '20KB' },
    ],
  },
  {
    id: 2,
    name: '文件夹2',
    children: [{ id: 21, name: '文件2-1', size: '15KB' }],
  },
]);

// 选中的节点值
const selectedKeys = ref<number[]>([11]);

// 选中事件处理
const handleSelect = (item) => {
  console.log('选中节点:', item.value);
};
</script>
6. 方法(通过 ref 调用)
方法名说明参数
expandAll展开所有节点-
collapseAll折叠所有节点-
expandNodes展开指定节点keys: Arrayable<number/string>
collapseNodes折叠指定节点keys: Arrayable<number/string>
getItemByValue根据值获取节点数据value: number/string

示例:

<template>
  <VbenTree ref="treeRef" :tree-data="treeData" />
  <button @click="handleExpandAll">展开全部</button>
</template>

<script lang="ts" setup>
import { ref } from 'vue';
import { VbenTree } from '@core/ui-kit/shadcn-ui/src/ui/tree';

const treeRef = ref();
const handleExpandAll = () => {
  treeRef.value?.expandAll();
};
</script>
注意事项
  • 数据格式:treeData 需为数组,每个节点的子节点通过 childrenField 指定的字段(默认 children)嵌套。
  • 选中值绑定:通过 v-model 绑定选中的节点值(单选为单个值,多选为数组)。
  • 禁用节点:可通过节点数据中的 disabledField 字段(默认 disabled)单独禁用某个节点。
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐