Skip to content

FxTreeV2 虚拟树

FxTreeV2 属于 @fx/components,不依赖任何 UI 框架。基于 FxFixedSizeList 只渲染可见节点,适合任意数据量的树;内部组合 FxTreeNode + FxCheckbox + FxIcon

为任意数据量提供极速滚动的树视图。

基础用法

基础的树形结构。

可选择

用于节点选择。点击「清空勾选」可编程式清空全部勾选状态(setCheckedKeys([])),勾选状态应同步回退。

WARNING

使用 show-checkbox 时,由于 check-on-click-leaf 默认为 true,点击叶子节点(最末级)会同时切换其勾选状态。

禁用 checkbox

可将节点的 checkbox 设为禁用。示例中 props 声明了 disabled 字段,key 含 2 的节点被设为 disabled: true,对应 checkbox 进入禁用态、不可点击。

默认展开与默认勾选

使用 default-expanded-keysdefault-checked-keys 分别设置初始展开和初始勾选的节点。

自定义节点内容

节点内容可自定义,因此可按需加入图标或按钮。通过 default 作用域插槽控制,插槽参数含 node(TreeNode 对象,含 isLeaf / expanded 等状态)与 data(节点数据)。

自定义节点类名

通过 props.class 为节点生成自定义类名。

自定义节点图标

可为不同节点状态渲染不同图标。节点对象的 isLeafexpanded 属性让你按叶子节点、展开节点、收起节点动态切换图标。

节点过滤

调用 Tree 实例的 filter 方法过滤节点,参数为过滤关键字。注意必须设置 filter-method,其值为过滤方法。

API

Attributes

属性说明类型默认值
data树数据Array<Record<string, any>>[]
empty-text数据为空时显示的文本string暂无数据
height树的高度(视口高度,超出滚动)number200
props数据字段别名配置,见下表TreeOptionProps见下表
highlight-current是否高亮当前节点booleanfalse
expand-on-click-node是否在点击节点时展开/收起;为 false 时仅点击箭头图标才展开/收起booleantrue
check-on-click-node是否在点击节点时勾选/取消勾选;为 false 时仅点击 checkbox 才切换booleanfalse
check-on-click-leaf是否在点击叶子节点时勾选/取消勾选booleantrue
default-expanded-keys默认展开的节点 key 数组Array<string | number>
show-checkbox是否显示 checkbox(节点可选)booleanfalse
check-strictly显示 checkbox 时,父子节点是否不联动booleanfalse
default-checked-keys默认勾选的节点 key 数组Array<string | number>
current-node-key当前选中节点的 keystring | number
filter-method过滤节点的方法(配合 filter 实例方法使用;返回 false 的节点被隐藏)(query, data, node) => boolean
indent相邻层级节点的水平缩进(像素)number16
icon自定义树节点图标:IconString(传给 FxIcon)或组件;默认 ep:caret-rightIconString | Component
item-size单个节点高度(虚拟列表行高)number26
scrollbar-always-on是否始终显示滚动条booleanfalse
perf-mode性能模式:增大内存占用以换取更流畅的滚动booleantrue
accordion是否每次只展开同级一个节点booleanfalse

props(字段别名)

属性说明类型默认值
value节点唯一标识字段(值需全树唯一)stringid
label指定作为节点标签的字段stringlabel
children指定作为子树的字段stringchildren
disabled指定节点 checkbox 是否禁用的字段stringdisabled
class自定义节点类名string | (data, node) => string | object

Exposes

名称说明参数
filter过滤所有节点,不匹配的节点被隐藏(query: string)
getCheckedNodes返回当前勾选的节点数据数组(leafOnly: boolean)
getCheckedKeys返回当前勾选的节点 key 数组(leafOnly: boolean)
setCheckedKeys勾选指定节点(keys: TreeKey[])
setChecked勾选/取消勾选单个节点,deep 表示是否递归子节点(key: TreeKey, checked: boolean, deep?: boolean)
setExpandedKeys展开指定节点(keys: TreeKey[])
getHalfCheckedNodes返回半选节点数据数组
getHalfCheckedKeys返回半选节点 key 数组
getCurrentKey返回当前高亮节点的 key(undefined 表示无高亮)
getCurrentNode返回当前高亮节点的数据(undefined 表示无高亮)
setCurrentKey设置高亮节点(key: TreeKey)
getNode按 key 或 data 获取节点(data: TreeKey | TreeNodeData)
expandNode展开指定节点(node: TreeNode)
collapseNode收起指定节点(node: TreeNode)
toggleCheckbox切换节点勾选态(node: TreeNode, checked, nodeClick?)
setData大数据量时绕过响应式直接设置数据,避免响应式开销(data: TreeData)
scrollTo滚动到指定位置(offset: number)
scrollToNode滚动到指定节点(strategy: auto / smart / center / start / end(key: TreeKey, strategy?)

Events

事件名说明参数
node-click点击节点时触发(data, node, e)
node-drop拖拽某物并放置到节点时触发(data, node, e)
node-contextmenu右键点击节点时触发(e, data, node)
check-change节点勾选状态变化时触发(data, checked)
check点击 checkbox 时触发(data, { checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys })
current-change当前节点变化时触发(data, node)
node-expand节点展开时触发(data, node)
node-collapse节点收起时触发(data, node)

Slots

插槽名说明类型
default自定义节点内容{ node: TreeNode, data: TreeNodeData }
empty数据为空时的自定义内容

类型声明

展开声明
ts
type TreeKey = string | number
type TreeNodeData = Record<string, any>
type TreeData = TreeNodeData[]

interface TreeNode {
  key: TreeKey
  level: number
  parent?: TreeNode
  children?: TreeNode[]
  data: TreeNodeData
  disabled?: boolean
  label?: string
  isLeaf?: boolean
  expanded?: boolean
  isEffectivelyChecked?: boolean
}