Back to Element Plus

Tree

docs/en-US/component/tree.md

2.13.731.4 KB
Original Source

Tree

Display a set of data with hierarchies.

Basic usage

Basic tree structure.

:::demo

tree/basic

:::

Selectable

Used for node selection.

:::demo This example also shows how to load node data asynchronously.

tree/selectable

:::

:::warning

When using show-checkbox, since check-on-click-leaf is true by default, last tree children's can be checked by clicking their nodes.

:::

Custom leaf node in lazy mode

:::demo A node's data is not fetched until it is clicked, so the Tree cannot predict whether a node is a leaf node. That's why a drop-down button is added to each node, and if it is a leaf node, the drop-down button will disappear when clicked. That being said, you can also tell the Tree in advance whether the node is a leaf node, avoiding the render of the drop-down button before a leaf node.

tree/custom-leaf

:::

Lazy loading multiple times ^(2.6.3)

:::demo When lazily loading node data remotely, lazy loading may sometimes fail. In this case, you can call reject to keep the node status as is and allow remote loading to continue.

tree/multiple-times-load

:::

Disabled checkbox

The checkbox of a node can be set as disabled.

:::demo In the example, 'disabled' property is declared in defaultProps, and some nodes are set as 'disabled:true'. The corresponding checkboxes are disabled and can't be clicked.

tree/disabled

:::

Default expanded and default checked

Tree nodes can be initially expanded or checked

:::demo Use default-expanded-keys and default-checked-keys to set initially expanded and initially checked nodes respectively. Note that for them to work, node-key is required. Its value is the name of a key in the data object, and the value of that key should be unique across the whole tree.

tree/default-state

:::

Checking tree nodes

:::demo This example shows how to get and set checked nodes. They both can be done in two approaches: node and key. If you are taking the key approach, node-key is required.

tree/checking-tree

:::

Custom node content

The content of tree nodes can be customized, so you can add icons or buttons as you will

:::demo There are two ways to customize template for tree nodes: render-content and scoped slot. Use render-content to assign a render function that returns the content of tree nodes. See Vue's documentation for a detailed introduction of render functions. If you prefer scoped slot, you'll have access to node and data in the scope, standing for the TreeNode object and node data of the current node respectively. Note that the render-content demo can't run in JSFiddle because it doesn't support JSX syntax. In a real project, render-content will work if relevant dependencies are correctly configured.

tree/customized-node

:::

Custom node class

The class of tree nodes can be customized

:::demo. Use props.class to build class name of nodes.

tree/custom-node-class

:::

Tree node filtering

Tree nodes can be filtered

:::demo Invoke the filter method of the Tree instance to filter tree nodes. Its parameter is the filtering keyword. Note that for it to work, filter-node-method is required, and its value is the filtering method.

tree/filtering

:::

Accordion

Only one node among the same level can be expanded at one time.

:::demo

tree/accordion

:::

Draggable

You can drag and drop Tree nodes by adding a draggable attribute.

:::demo

tree/draggable

:::

Tree API

Attributes

NameDescriptionTypeDefault
datatree data^[array]Array<{[key: string]: any}>
empty-texttext displayed when data is void^[string]
node-keyunique identity key name for nodes, its value should be unique across the whole tree^[string]
propsconfiguration options, see the following table^[object]
render-after-expandwhether to render child nodes only after a parent node is expanded for the first time^[boolean]true
loadmethod for loading subtree data, only works when lazy is true^[Function](node, resolve, reject) => void
render-contentrender function for tree node^[Function](h, { node, data, store }) => void
highlight-currentwhether current node is highlighted^[boolean]false
default-expand-allwhether to expand all nodes by default^[boolean]false
expand-on-click-nodewhether to expand or collapse node when clicking on the node, if false, then expand or collapse node only when clicking on the arrow icon.^[boolean]true
check-on-click-nodewhether to check or uncheck node when clicking on the node, if false, the node can only be checked or unchecked by clicking on the checkbox.^[boolean]false
check-on-click-leaf ^(2.9.6)whether to check or uncheck node when clicking on leaf node (last children).^[boolean]true
auto-expand-parentwhether to expand father node when a child node is expanded^[boolean]true
default-expanded-keysarray of keys of initially expanded nodes^[array]Array<string | number>
show-checkboxwhether node is selectable^[boolean]false
check-strictlywhether checked state of a node not affects its father and child nodes when show-checkbox is true^[boolean]false
default-checked-keysarray of keys of initially checked nodes^[array]Array<string | number>
current-node-keykey of initially selected node^[string] / ^[number]
filter-node-methodthis function will be executed on each node when use filter method. if return false, tree node will be hidden.^[Function](value, data, node) => boolean
accordionwhether only one node among the same level can be expanded at one time^[boolean]false
indenthorizontal indentation of nodes in adjacent levels in pixels^[number]18
iconcustom tree node icon component^[string] / ^[Component]
lazywhether to lazy load leaf node, used with load attribute^[boolean]false
draggablewhether enable tree nodes drag and drop^[boolean]false
allow-dragthis function will be executed before dragging a node. If false is returned, the node can not be dragged^[Function](node) => boolean
allow-dropthis function will be executed before the dragging node is dropped. If false is returned, the dragging node can not be dropped at the target node. type has three possible values: 'prev' (inserting the dragging node before the target node), 'inner' (inserting the dragging node to the target node) and 'next' (inserting the dragging node after the target node)^[Function](draggingNode, dropNode, type) => boolean

props

AttributeDescriptionTypeDefault
labelspecify which key of node object is used as the node's label^[string] / ^[Function](data, node) => string
childrenspecify which node object is used as the node's subtree^[string]
disabledspecify which key of node object represents if node's checkbox is disabled^[string] / ^[Function](data, node) => boolean
isLeafspecify whether the node is a leaf node, only works when lazy load is enabled^[string] / ^[Function](data, node) => boolean
classcustom node class name^[string] / ^[Function](data, node) => string

Exposes

Tree has the following method, which returns the currently selected array of nodes.

MethodDescriptionParameters
filterfilter all tree nodes, filtered nodes will be hiddenAccept a parameter which will be used as first parameter for filter-node-method
updateKeyChildrenset new data to node, only works when node-key is assigned(key, data) Accept two parameters: 1. key of node 2. new data
getCheckedNodesIf the node can be selected (show-checkbox is true), it returns the currently selected array of nodes(leafOnly, includeHalfChecked) Accept two boolean type parameters: 1. default value is false. If the parameter is true, it only returns the currently selected array of sub-nodes. 2. default value is false. If the parameter is true, the return value contains halfchecked nodes
setCheckedNodesset certain nodes to be checked, only works when node-key is assigned(nodes, leafOnly) Accept two parameters: 1. an array of node objects to be checked 2. a boolean parameter. If set to true, only the checked status of leaf nodes will be set. The default value is false.
getCheckedKeysIf the node can be selected (show-checkbox is true), it returns the currently selected array of node's keys(leafOnly) Accept a boolean type parameter whose default value is false. If the parameter is true, it only returns the currently selected array of sub-nodes.
setCheckedKeysset certain nodes to be checked, only works when node-key is assigned(keys, leafOnly) Accept two parameters: 1. an array of node's keys to be checked 2. a boolean parameter. If set to true, only the checked status of leaf nodes will be set. The default value is false.
setCheckedset node to be checked or not, only works when node-key is assigned(key/data, checked, deep) Accept three parameters: 1. node's key or data to be checked 2. a boolean typed parameter indicating checked or not. 3. a boolean typed parameter indicating deep or not (note that check-strictly must be false).
getHalfCheckedNodesIf the node can be selected (show-checkbox is true), it returns the currently half selected array of nodes
getHalfCheckedKeysIf the node can be selected (show-checkbox is true), it returns the currently half selected array of node's keys
getCurrentKeyreturn the highlight node's key (null if no node is highlighted)
getCurrentNodereturn the highlight node's data (null if no node is highlighted)
setCurrentKeyset highlighted node by key, only works when node-key is assigned(key, shouldAutoExpandParent=true) 1. the node's key to be highlighted. If null, cancel the currently highlighted node 2. whether to automatically expand parent node
setCurrentNodeset highlighted node, only works when node-key is assigned(node, shouldAutoExpandParent=true) 1. the node to be highlighted 2. whether to automatically expand parent node
getNodeget node by data or key(data) the node's data or key
removeremove a node, only works when node-key is assigned(data) the node's data or node to be deleted
appendappend a child node to a given node in the tree(data, parentNode) 1. child node's data to be appended 2. parent node's data, key or node
insertBeforeinsert a node before a given node in the tree(data, refNode) 1. node's data to be inserted 2. reference node's data, key or node
insertAfterinsert a node after a given node in the tree(data, refNode) 1. node's data to be inserted 2. reference node's data, key or node

Events

NameDescriptionParameters
node-clicktriggers when a node is clickedfour parameters: node object corresponding to the node clicked, node property of TreeNode, TreeNode itself, event object
node-contextmenutriggers when a node is clicked by right buttonfour parameters: event, node object corresponding to the node clicked, node property of TreeNode, TreeNode itself
check-changetriggers when the selected state of the node changesthree parameters: node object corresponding to the node whose selected state is changed, whether the node is selected, whether node's subtree has selected nodes
checktriggers after clicking the checkbox of a nodetwo parameters: node object corresponding to the node that is checked / unchecked, tree checked status object which has four props: checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys
current-changetriggers when current node changestwo parameters: node object corresponding to the current node, node property of TreeNode
node-expandtriggers when current node openthree parameters: node object corresponding to the node opened, node property of TreeNode, TreeNode itself
node-collapsetriggers when current node closethree parameters: node object corresponding to the node closed, node property of TreeNode, TreeNode itself
node-drag-starttriggers when dragging startstwo parameters: node object corresponding to the dragging node, event.
node-drag-entertriggers when the dragging node enters another nodethree parameters: node object corresponding to the dragging node, node object corresponding to the entering node, event.
node-drag-leavetriggers when the dragging node leaves a nodethree parameters: node object corresponding to the dragging node, node object corresponding to the leaving node, event.
node-drag-overtriggers when dragging over a node (like mouseover event)three parameters: node object corresponding to the dragging node, node object corresponding to the dragging over node, event.
node-drag-endtriggers when dragging endsfour parameters: node object corresponding to the dragging node, node object corresponding to the dragging end node (may be undefined), node drop type (before / after / inner), event.
node-droptriggers after the dragging node is droppedfour parameters: node object corresponding to the dragging node, node object corresponding to the dropped node, node drop type (before / after / inner), event.

Slots

NameDescriptionType
defaultcustom content for tree nodes^[object]{ node: UnwrapRef<RootTreeType['root']>, data: Tree | TreeOptionProps }
empty ^(2.3.4)custom content when data is empty

Type Declarations

<details> <summary>Show declarations</summary>
ts
interface RootTreeType {
  root: Ref<Node>
  // ...
}

// UnwrapRef<RootTreeType['root']> => Node
type Node = {
  canFocus: boolean
  checked: boolean
  childNodes: Node[]
  data: TreeNodeData
  expanded: boolean
  id: number
  indeterminate: boolean
  isCurrent: boolean
  isEffectivelyChecked: boolean
  isLeaf?: boolean
  isLeafByUser?: boolean
  level: number
  loaded: boolean
  loading: boolean
  parent: Node | null
  store: TreeStore
  text: string | null
  visible: boolean
}

// TreeNodeData => Tree / TreeOptionProps
// Tree type is your prop type.
// TreeOptionProps is default prop type
interface TreeOptionProps {
  children?: string
  label?: string | ((data: TreeNodeData, node: Node) => string)
  disabled?: string | ((data: TreeNodeData, node: Node) => boolean)
  isLeaf?: string | ((data: TreeNodeData, node: Node) => boolean)
  class?: (
    data: TreeNodeData,
    node: Node
  ) => string | { [key: string]: boolean }
}
</details>