Skip to content

API 汇总 ​

四张表对应 lib/VueGiantTree.vue 的 defineProps / defineExpose / 插槽与 defineEmits, 默认值取自 withDefaults。

Props ​

prop类型默认值说明
modelValueTreeNodeData | TreeNodeData[] | string | string[]—选中结果(v-model)
treeTreeInputItem[][]树数据,邻接表格式
rootstring''根标识;顶层节点的 parentId 应等于它
widthstring'100%'容器宽度
heightstring'100%'容器高度
lineHeightnumber26每行高度(像素)
fontSizestring'14px'字体大小
selectTypeSelectTypeSelectType.CHECKBOXCHECKBOX / RADIO / SELECT
fieldKeysTreeFieldKeys{}输入 JSON 的字段名映射
outputIdOnlybooleantruetrue 时 v-model 只给 ID;false 给完整节点
checkedOutputModeCheckedOutputModeCheckedOutputMode.AllCHECKBOX 的输出过滤模式
filterFnFilterFn—自定义过滤回调(CHECKBOX+Custom 过滤输出;RADIO 过滤可选)
nodeIconboolean | NodeIconResolverfalse节点图标:true 内置,或按节点回调
showLineboolean | ShowLineOptionsfalse连接线展示模式
chunkedBuildbooleanfalse分批写入 WASM 输入
buildBatchSizenumber2000每批节点数
workerModebooleanfalse树算法跑在 Web Worker
preorderedInputbooleanfalse输入已按深度优先前序排列时跳过通用分组

方法 ​

通过组件 ref 调用。

方法说明
expandAll()展开当前视图中的所有可展开节点
collapseAll()收起当前视图中的所有可展开节点
fuzzySearch(keyword)300ms 防抖的模糊搜索;空字符串清除
fuzzySearchRaw(keyword)立即执行的模糊搜索;空字符串清除
switchDisplay(displayType)切换 TREE / SEARCH 视图
getTreeSize()返回树节点总数
getBuildReady()首次构建是否已完成
getBuildMetrics()最近一次构建的各阶段耗时
getWorkerMetrics()Worker 队列、往返、序列化与结构批次指标
setChecked(id)设置单个选中节点
setCheckedByIds(ids)批量设置选中节点
clearAllChecked()清除所有选中状态
refreshCheckedResult()按当前输出配置重新触发 v-model 结果
updateNode(id, patch)更新节点原始字段;ID 不可修改
addNode(node)在根或已有父节点下新增节点
removeNode(id)删除节点及其全部子树

插槽 ​

两个插槽都接收 { node }(当前行的 TreeNodeData)。

插槽说明
#node替换节点名称所在的主体内容区;未传时显示 node.name
#actions行末操作区;未传时不渲染也不占空间,其点击不会触发行选中

#actions 只提供操作入口,不会修改或重建树数据;编辑、删除后的数据同步由业务方自行处理。

vue
<VueGiantTree :tree="treeData" root="root" v-model="selected">
  <template #node="{ node }">
    <strong>{{ node.name }}</strong>
    <span v-if="node.disabled">禁用</span>
  </template>

  <template #actions="{ node }">
    <button @click="edit(node)">编辑</button>
    <button @click="remove(node)">删除</button>
  </template>
</VueGiantTree>

事件 ​

事件载荷说明
update:modelValueTreeNodeData | TreeNodeData[] | string | string[]选中结果变化
update:treeTreeInputItem[]增删改后的新输入数组
item-contextmenu(node: TreeNodeData, event: MouseEvent)行上右键;组件不会自动 preventDefault()

组件只抛出事件,不内置菜单 UI。在行上右键会触发 item-contextmenu(node, event),node 为该行 TreeNodeData,event 为原生 MouseEvent。组件不会自动调用 preventDefault(),浏览器原生菜单照常弹出;如需替换为自定义菜单,请在回调里自行 event.preventDefault()。菜单的渲染、定位与关闭由业务方负责,常见做法是 Teleport 到 body 并用 event.clientX/clientY 定位。右键不会触发行点击/选中。

vue
<script setup lang="ts">
import { ref } from 'vue'
import type { TreeNodeData } from 'vue3-giant-tree-wasm'

const menu = ref<{ x: number; y: number; node: TreeNodeData } | null>(null)

const onContextMenu = (node: TreeNodeData, event: MouseEvent) => {
  event.preventDefault()
  menu.value = { x: event.clientX, y: event.clientY, node }
}
</script>

<template>
  <VueGiantTree :tree="treeData" root="root" v-model="selected" @item-contextmenu="onContextMenu" />

  <Teleport to="body">
    <ul v-if="menu" class="my-menu" :style="{ left: menu.x + 'px', top: menu.y + 'px' }">
      <li @click="edit(menu.node)">编辑</li>
      <li @click="remove(menu.node)">删除</li>
    </ul>
  </Teleport>
</template>

动手试试 ​

以上所有能力都可以在完整演示场里现场切换。