Skip to content

Tree 树形控件

树形控件组件,用于展示树形结构数据。

基础用法

html
<div id="demo-tree"></div>

<script>
  const tree = new SaTree('#demo-tree', {
    data: [
      {
        id: 1,
        label: '一级节点 1',
        children: [
          { id: 11, label: '二级节点 1-1' },
          { id: 12, label: '二级节点 1-2' }
        ]
      },
      {
        id: 2,
        label: '一级节点 2',
        children: [
          { id: 21, label: '二级节点 2-1' },
          { id: 22, label: '二级节点 2-2' }
        ]
      }
    ],
    onNodeClick: (node) => {
      console.log('点击节点:', node);
    }
  });
</script>
加载 SanoUI 组件中...
            
          

带复选框

通过 showCheckbox: true 启用复选框功能。

html
<div id="demo-tree-checkbox"></div>

<script>
  const tree = new SaTree('#demo-tree-checkbox', {
    data: [
      {
        id: 1,
        label: '一级节点 1',
        children: [
          { id: 11, label: '二级节点 1-1' },
          { id: 12, label: '二级节点 1-2' }
        ]
      }
    ],
    showCheckbox: true,
    onCheck: (checkedNodes) => {
      console.log('选中的节点:', checkedNodes);
    }
  });
</script>
加载 SanoUI 组件中...
            
          

API

构造函数参数

参数说明类型默认值
container容器选择器或元素string | HTMLElement-
options配置选项SaTreeOptions{}

配置选项

参数说明类型可选值默认值
data树形数据Array<TreeNode>-[]
showCheckbox是否显示复选框boolean-false
defaultExpandedKeys默认展开的节点Array<string>-[]
defaultCheckedKeys默认选中的节点Array<string>-[]
onNodeClick节点点击回调function(node: TreeNode)--
onCheck复选框变化回调function(checkedNodes: Array<TreeNode>)--

TreeNode 配置

参数说明类型默认值
id节点唯一标识string | number-
label节点文本string-
children子节点数组Array<TreeNode>-
disabled是否禁用booleanfalse

方法

方法名说明参数返回值
setData设置树形数据data: Array<TreeNode>void
getCheckedNodes获取选中的节点-Array<TreeNode>
expandAll展开所有节点-void
collapseAll折叠所有节点-void
destroy销毁实例-void

示例代码

手动创建实例

javascript
const tree = new SaTree('#my-tree', {
  data: [
    {
      id: 1,
      label: '一级节点 1',
      children: [
        { id: 11, label: '二级节点 1-1' },
        { id: 12, label: '二级节点 1-2' }
      ]
    }
  ],
  showCheckbox: true,
  defaultExpandedKeys: ['1'],
  onNodeClick: (node) => {
    console.log('点击节点:', node);
  },
  onCheck: (checkedNodes) => {
    console.log('选中的节点:', checkedNodes);
  }
});

// 获取选中的节点
const checkedNodes = tree.getCheckedNodes();

// 展开所有节点
tree.expandAll();

// 折叠所有节点
tree.collapseAll();

实际使用场景

场景 1:文件目录树

使用树形控件展示文件目录结构。

html
<div id="file-tree" style="border: 1px solid #ddd; border-radius: 4px; padding: 1rem; max-height: 400px; overflow-y: auto;"></div>

<script>
  const tree = new SaTree('#file-tree', {
    data: [
      {
        id: '1',
        label: '项目文件夹',
        children: [
          {
            id: '1-1',
            label: 'src',
            children: [
              { id: '1-1-1', label: 'index.js' },
              { id: '1-1-2', label: 'app.js' }
            ]
          },
          {
            id: '1-2',
            label: 'public',
            children: [
              { id: '1-2-1', label: 'index.html' }
            ]
          },
          { id: '1-3', label: 'package.json' }
        ]
      }
    ],
    defaultExpandedKeys: ['1', '1-1'],
    onNodeClick: (node) => {
      console.log('点击文件:', node.label);
    }
  });
</script>
加载 SanoUI 组件中...
            
          

场景 2:权限选择树

使用带复选框的树形控件选择权限。

html
<div id="permission-tree" style="border: 1px solid #ddd; border-radius: 4px; padding: 1rem; max-height: 400px; overflow-y: auto;"></div>
<button class="sa-button sa-button--primary" onclick="getSelectedPermissions()" style="margin-top: 1rem;">获取选中的权限</button>

<script>
  const tree = new SaTree('#permission-tree', {
    data: [
      {
        id: 'user',
        label: '用户管理',
        children: [
          { id: 'user-view', label: '查看用户' },
          { id: 'user-add', label: '添加用户' },
          { id: 'user-edit', label: '编辑用户' },
          { id: 'user-delete', label: '删除用户' }
        ]
      },
      {
        id: 'role',
        label: '角色管理',
        children: [
          { id: 'role-view', label: '查看角色' },
          { id: 'role-add', label: '添加角色' },
          { id: 'role-edit', label: '编辑角色' }
        ]
      }
    ],
    showCheckbox: true,
    defaultExpandedKeys: ['user', 'role'],
    onCheck: (checkedNodes) => {
      console.log('选中的权限:', checkedNodes.map(n => n.label));
    }
  });
  
  function getSelectedPermissions() {
    const checkedNodes = tree.getCheckedNodes();
    const permissions = checkedNodes.map(n => n.label);
    alert('选中的权限:\n' + permissions.join('\n'));
  }
</script>
加载 SanoUI 组件中...
            
          

Released under the MIT License.