Skip to content

树形组件 - STree

借助 ATree 的 checkStrictly="true" 特性,重新实现了 勾选选中展开禁用异步加载 等联动逻辑

演示

基本用法

基本用法

简单的用法,展示 勾选项选中项展开项禁用 等功能

0
0-0
0-0-0
0-0-1
0-1
0-1-0
0-1-1
0-2
checkedKeys:
 "0-0"
 "0-0-0"
 "0-0-1"
 "0-1-0"
expandedKeys:
 "0"
 "0-0"
 "0-1"
selectedKeys:
 "0-0-0"
复制代码
显示代码

禁用用法

禁用用法

如果我们希望 禁用父选项 同时禁用其子选项时,则可以使用 props.forceApplyDisabled="true" 来实现

0
0-0
0-0-0
0-0-1
0-1
0-1-0
0-1-1
0-2
checkedKeys:
 "0-0"
 "0-0-0"
 "0-0-1"
 "0-1-0"
expandedKeys:
 "0"
 "0-0"
 "0-1"
selectedKeys:
 "0-0-0"
复制代码
显示代码

搜索用法

搜索用法

STree 支持通过 props.filterFieldprops.filterValue 来实现 TreeNode 的筛选和搜索
props.filterField: 搜索模式,支持 keytitle 两种模式,默认 title
props.filterValue: 搜索值

0
0-0
0-1
0-2
0-2-0
checkedKeys:
 "0-0"
 "0-0-0"
 "0-0-1"
 "0-1-0"
expandedKeys:
 "0"
 "0-0"
 "0-1"
selectedKeys:
 "0-0-0"
复制代码
显示代码

自定义字段

自定义字段

我们可以通过 props.fieldNames 指定 STree 节点中 key, title, children 字段,从而适配不同的数据结构

0
0-0
0-0-0
0-0-1
0-1
0-1-0
0-1-1
0-2
checkedKeys:
 "0-0"
 "0-0-0"
 "0-0-1"
 "0-1-0"
expandedKeys:
 "0"
 "0-0"
 "0-1"
selectedKeys:
 "0-0-0"
复制代码
显示代码

自定义层级

自定义层级

我们可以通过 props.allowCheckedLevelprops.allowSelectedLevel 指定 checkable / selectable 的层级

root
0-0
0-0-0
0-0-1
0-1
0-1-0
0-1-1
0-2
checkedKeys:
 "0-0-0"
 "0-0-1"
 "0-1-0"
expandedKeys:
 "0"
 "0-0"
 "0-1"
selectedKeys:
 "0-0-0"
复制代码
显示代码

自定义卡槽

自定义卡槽

STreeATree 组件原有 icontitle 卡槽进行了扩展 (eg. iconRootLabeltitleParentButton 等)

Root Node
Parent Node
0-0-0
0-0-1
Mouse Hover
0-1-0
0-1-1
0-2
checkedKeys:
 "0-0"
 "0-0-0"
 "0-0-1"
 "0-1-0"
expandedKeys:
 "0"
 "0-0"
 "0-1"
selectedKeys:
 "0-1"
复制代码
显示代码

手风琴模式

手风琴模式

STree 组件中,我们可以通过 props.allowMultiExpanded="false" 快速实现手风琴效果

root
0-0
0-0-0
0-0-1
0-1
0-2
checkedKeys:
 "0-0-0"
 "0-0-1"
 "0-1-0"
expandedKeys:
 "0"
 "0-0"
selectedKeys:
 "0-0-0"
复制代码
显示代码

选项link模式

选项link模式

STree 组件中,无论是 checkedMode 还是 selectedMode, 它们都支持 default / link 两种模式

默认 default 模式
0
0-0
0-0-0
0-0-1
0-1
0-1-0
0-1-1
checkedKeys:
 "0-0"
 "0-0-0"
 "0-1-0"
expandedKeys:
 "0"
 "0-0"
 "0-1"
selectedKeys:
 "0-0-0"
使用 link 模式
0
0-0
0-0-0
0-0-1
0-1
0-1-0
0-1-1
checkedKeys:
 "0"
 "0-0"
 "0-0-0"
 "0-1"
 "0-1-0"
expandedKeys:
 "0"
 "0-0"
 "0-1"
selectedKeys:
 "0"
 "0-0"
 "0-0-0"
复制代码
显示代码

异步加载节点

异步加载节点

STree 组件中,我们通过 props.loadData 异步加载远程 Tree 节点,props.checkedKeys 会自动适配异步节点

0
checkedKeys:
 "0-0-0"
 "0-0-1"
 "0-1-0"
 "0-2"
expandedKeys:
 "0"
selectedKeys:
 "0"
复制代码
显示代码

拖拽Tree节点

拖拽Tree节点

我们可以通过 props.draggable="true" 轻松实现,同时提供了 props.dropHandler 来定义拖拽结束时的拦截器

使用 link 模式
root
0-0
0-0-0
0-0-1
0-1
0-1-0
0-1-1
0-2
0-2-0
checkedKeys:
 "0"
 "0-0"
 "0-0-0"
 "0-0-1"
 "0-1"
 "0-1-0"
expandedKeys:
 "0"
 "0-0"
 "0-1"
 "0-2"
selectedKeys:
 "0"
 "0-1"
 "0-1-0"
复制代码
显示代码

API

Props

STree Props

参数说明类型默认值
class定义 STree 组件 class 类any-
style定义 STree 组件 样式any-
height源自 ATree 组件 props.heightnumber-
bgColor定义 STree 组件 背景色string'transparent'
treeData (v-model)STree 数据源STreeSourceNode[][]
loadData异步加载远程节点STreeLoadData-
dropHandler拖拽结束时的拦截器,仅在 draggable="true" 时启用STreeDropHandler-
checkedKeys (v-model)节点已勾选的选项string[] | number[][]
selectedKeys (v-model)节点已选中的选项string[] | number[][]
expandedKeys (v-model)已展开的节点选项string[] | number[][]
selectedMode节点选中时的模式,选项 link 模式'link' | 'default''default'
checkedMode节点勾选时的模式,选项 link 模式'link' | 'default''default'
filterField (v-model)搜索模式,支持 key / title 两种模式, 使用 title 时支持模糊匹配'key' | 'title''title'
filterValue (v-model)搜索值string-
fieldNames (原 replaceFields)替换 title, key, children 字段, 若还使用 replaceFields,请及时修改 详情object-
allowCheckedLevel指定 tree 节点 selectable 层级number1
allowSelectedLevel指定 tree 节点 checkable 层级number1
forceCleanWhenNotInTreeNodes是否清理不在当前 treeData 中的 checkedKeys/selectedKeysbooleanfalse
forceCleanWhenRemoveTreeNode是否清理从当前 treeData 中移除的那些 checkedKeys/selectedKeysbooleantrue
forceApplyDisableCheckbox当某父节点禁用可选项时 (disableCheckbox), 是否强制其子节点也禁用可选项booleanfalse
forceApplyDisabled当某父节点禁用选项时 (disabled), 是否强制其子节点也禁用选项booleanfalse
alwaysShowTitleButtontree 节点定义的 titleButton 是否一直显示,而不是只有鼠标 hover 才显示booleanfalse
allowSelectToCheck当选中某 tree 节点选择时,是否当 切换该节点勾选项 进行处理booleanfalse
allowAutoCollapsed当折叠某节点时,是否同时折叠该节点名下的父节点booleantrue
allowAutoExpanded当展开某节点时,如果该节点名下仅有一个节点,且为父节点时,是否展开该父节点booleantrue
allowAutoExpandLoad当尝试展开某节点名下父节点,发现该父节点需要异步加载节点时,是否继续展开booleanfasle
allowMultiExpanded是否允许多个展开项存在。当设置为 false 时,即出现了手风琴效果booleantrue
defaultExpandAll初次渲染 tree 节点时,是否展开当前所有父节点booleanfalse
allowUnExpanded是否允许折叠所有 tree 节点booleanfalse
allowUnSelected是否允许 tree 节点全部未 selectedbooleanfalse
allowUnChecked是否允许 tree 节点全部未 checkedbooleantrue
iconfontUrl配置 tree 图标 iconfontUrlstring-
iconPrefix配置 tree 图标 iconPrefixstring-
iconStyle配置 tree 图标 style 样式object-
iconClass配置 tree 图标 class 类object-
selectabletree 节点是否可选中booleantrue
checkable设置独立节点是否展示 Checkboxbooleanfalse
blockNode是否 tree 节点占据一行booleanfalse
draggable设置节点可拖拽booleanfalse
disabled是否禁用booleanfalse
showIcon是否展示图标booleanfalse
showLine是否展示连接线booleanfalse
loading是否 loadingbooleanfalse
virtual设置 false 时关闭虚拟滚动booleantrue
tooltip是否启用 SEllipsis, 当 tree 节点标题内容过长,自动省略和提示booleantrue
sticky是否对 tree 根节点 进行置顶吸附booleanfalse

STree FieldNames

参数说明类型默认值
key定义 keystring'key'
icon定义 iconstring'icon'
title定义 titlestring'title'
isLeaf定义 isLeafstring'isLeaf'
children定义 childrenstring'children'
disabled定义 disabledstring'disabled'
disableCheckbox定义 disableCheckboxstring'disableCheckbox'
forceApplyDisabled定义 forceApplyDisabledstring'forceApplyDisabled'
alwaysShowTitleButton定义 alwaysShowTitleButtonstring'alwaysShowTitleButton'
forceApplyDisableCheckbox定义 forceApplyDisableCheckboxstring'forceApplyDisableCheckbox'

Emits

事件说明类型
checktree 节点 勾选项发生变化时回调(emiter: STreeEmiterCheck) => true
selecttree 节点 选中项发生变化时回调(emiter: STreeEmiterSelect) => true
expandtree 节点 展开项发生变化时回调(emiter: STreeEmiterExpand) => true
changetree 节点 发生变化时回调(emiter: STreeEmiterChange) => true

Slots

插槽名插槽说明插槽参数
iconRoot定义 tree 根节点 图标STreeSourceNode
iconParent定义 tree 父节点 图标STreeSourceNode
iconLeaf定义 tree 叶子节点 图标STreeSourceNode
titleRoot定义 tree 根节点 title 内容(不建议使用)STreeSourceNode
titleParent定义 tree 父节点 title 内容(不建议使用)STreeSourceNode
titleLeaf定义 tree 叶子节点 title 内容(不建议使用)STreeSourceNode
titleRootLabel定义 tree 根节点 title 中 标题STreeSourceNode
titleParentLabel定义 tree 父节点 title 中 标题STreeSourceNode
titleLeafLabel定义 tree 叶子节点 title 中 标题STreeSourceNode
titleRootButton定义 tree 根节点 title 中 按钮组STreeSourceNode
titleParentButton定义 tree 父节点 title 中 按钮组STreeSourceNode
titleLeafButton定义 tree 叶子节点 title 中 按钮组STreeSourceNode
switcherIcon定义 tree 节点 展开/折叠图标STreeSourceNode & { switcherCls: string;}

Expose

属性/方法名说明描述类型
filterTreeNodes搜索 tree 节点匹配项(props: STreeFilterProps,
expand?: boolean) => void
reloadTreeNodes重新加载某 tree 节点数据(nodes: STreeSourceNodes,
parentKey?: STreeKey | null,
force?: boolean) => void
appendTreeNodes追加某 tree 节点数据(nodes: STreeSourceNodes,
parentKey?: STreeKey | null,
force?: boolean) => void
removeTreeNodes移除某 tree 节点数据(nodes: STreeSourceNodes,
parentKey?: STreeKey | null,
force?: boolean) => void
changeTreeNodes更新某 tree 节点数据(nodes: STreeSourceNodes,
parentKey?: STreeKey | null,
force?: boolean) => void
pickUpperTreeNodes根据 key, 查询匹配节点的所有上层 tree 节点数据(key: STreeKey, level?: number) => Array<STreeSourceNode>
pickLowerTreeNodes根据 key, 查询匹配节点的所有下层 tree 节点数据(key: STreeKey, level?: number) => Array<STreeSourceNode>
pickMatchTreeNode根据 key, 查询匹配节点的数据(key: STreeKey, level?: number) => STreeSourceNode | null
doTreeAllExpanded展开所有可展开的 tree 节点() => void
doTreeAllCollapsed折叠所有已展开的 tree 节点() => void
doTreeToggleExpanded切换一些 tree 节点展开项(keys: STreeKeys) => void
doTreeOnlyExpanded仅展开指定的一些 tree 节点(keys: STreeKeys) => void
doTreePushExpanded追加指定的 tree 节点展开项(keys: STreeKeys) => void
doTreePopExpanded折叠指定的 tree 节点展开项(keys: STreeKeys) => void
doTreeAllChecked勾选所有可勾选的 tree 节点() => void
doTreeAllUnChecked取消所有已勾选的 tree 节点() => void
doTreeToggleChecked切换一些 tree 节点勾选项(keys: STreeKeys) => void
doTreeOnlyChecked仅勾选指定的一些 tree 节点(keys: STreeKeys) => void
doTreePushChecked追加指定的 tree 节点勾选项(keys: STreeKeys) => void
doTreePopChecked取消指定的 tree 节点勾选项(keys: STreeKeys) => void
doTreeSelected手动选中某 tree 节点选项(keys: STreeKeys) => void
forceUpdate手动更新并重新渲染 STree 组件(clear?: boolean) => void

Definer

定义说明
treeDataDefiner定义 Props.treeData 时的 TypeScript 提示和校验
treeLoadDataDefiner定义 Props.loadData 时的 TypeScript 提示和校验
treeDropHandlerDefiner定义 Props.dropHandler 时的 TypeScript 提示和校验
treeFieldNamesDefiner定义 Props.fieldNames 时的 TypeScript 提示和校验
treeEmitCheckDefiner定义 Emits.check 时的 TypeScript 提示和校验
treeEmitSelectDefiner定义 Emits.select 时的 TypeScript 提示和校验
treeEmitExpandDefiner定义 Emits.expand 时的 TypeScript 提示和校验
treeEmitChangeDefiner定义 Emits.change 时的 TypeScript 提示和校验

基于 MIT 许可发布