Element Plus中el-tree组件默认选中第一个节点的实现方法

Element Plus中el-tree组件默认选中第一个节点的实现方法

使用setCurrentKey API(推荐)

在Element Plus的el-tree组件中,实现默认选中第一个节点是常见的交互需求。本文将详细介绍两种实现方法,帮助开发者快速掌握相关技术要点。

setCurrentKey是Element Plus提供的官方API,通过设置当前节点的key值实现选中效果。该方法需要配合highlight-current属性和node-key使用。

cpp 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>el-tree默认选中</title>
  <link rel="stylesheet" href="https://unpkg.com/element-plus/dist/index.css">
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  <script src="https://unpkg.com/element-plus"></script>
</head>
<body>
  <div id="app">
    <el-tree
      ref="treeRef"
      :data="treeData"
      node-key="id"
      :props="defaultProps"
      highlight-current
      @node-click="handleNodeClick"
    ></el-tree>
  </div>

  <script>
    const { createApp, ref, onMounted } = Vue;
    const { ElTree } = ElementPlus;

    createApp({
      setup() {
        const treeRef = ref(null);
        const treeData = ref([
          {
            id: 1,
            label: '一级节点 1',
            children: [
              { id: 4, label: '二级节点 1-1' },
              { id: 5, label: '二级节点 1-2' }
            ]
          },
          { id: 2, label: '一级节点 2' },
          { id: 3, label: '一级节点 3' }
        ]);

        const defaultProps = {
          children: 'children',
          label: 'label'
        };

        const handleNodeClick = (data) => {
          console.log('节点点击:', data);
        };

        onMounted(() => {
          // 默认选中第一个节点
          if (treeData.value.length > 0) {
            treeRef.value.setCurrentKey(treeData.value[0].id);
          }
        });

        return {
          treeRef,
          treeData,
          defaultProps,
          handleNodeClick
        };
      }
    }).use(ElementPlus).mount('#app');
  </script>
</body>
</html>

关键点说明

  1. 必须设置node-key属性,指定节点唯一标识字段
  2. 需要添加highlight-current属性以高亮显示当前选中节点
  3. 操作时机应在组件挂载完成后(onMounted生命周期)

DOM操作模拟点击(兼容旧版)

对于特殊场景或旧版本兼容,可通过DOM操作模拟点击第一个节点实现选中效果。

cpp 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>el-tree默认选中(兼容版)</title>
  <link rel="stylesheet" href="https://unpkg.com/element-plus/dist/index.css">
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  <script src="https://unpkg.com/element-plus"></script>
</head>
<body>
  <div id="app">
    <el-tree
      :data="treeData"
      node-key="id"
      :props="defaultProps"
      :default-expanded-keys="expandedKeys"
      @node-click="handleNodeClick"
    ></el-tree>
  </div>

  <script>
    const { createApp, ref, watch, nextTick } = Vue;

    createApp({
      setup() {
        const treeData = ref([
          {
            id: 1,
            label: '一级节点 1',
            children: [
              { id: 4, label: '二级节点 1-1' },
              { id: 5, label: '二级节点 1-2' }
            ]
          },
          { id: 2, label: '一级节点 2' },
          { id: 3, label: '一级节点 3' }
        ]);

        const expandedKeys = ref([]);
        const defaultProps = {
          children: 'children',
          label: 'label'
        };

        const handleNodeClick = (data) => {
          console.log('节点点击:', data);
        };

        // 设置默认展开第一个节点
        if (treeData.value.length > 0) {
          expandedKeys.value = [treeData.value[0].id];
        }

        // 监听数据变化后模拟点击
        watch(treeData, () => {
          nextTick(() => {
            const firstNode = document.querySelector('.el-tree-node__content');
            if (firstNode) firstNode.click();
          });
        }, { immediate: true });

        return {
          treeData,
          expandedKeys,
          defaultProps,
          handleNodeClick
        };
      }
    }).use(ElementPlus).mount('#app');
  </script>
</body>
</html>

注意事项

  1. 需配合default-expanded-keys确保第一个节点可见
  2. 操作时机应在DOM更新完成后(nextTick
  3. 性能影响较大,不推荐常规使用

方法对比

相关推荐
LaughingZhu5 小时前
Product Hunt 每日热榜 | 2026-05-21
前端·人工智能·经验分享·chatgpt·html
怕浪猫5 小时前
Electron 开发实战(一):从零入门核心基础与环境搭建
前端·electron·ai编程
小鹏linux6 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
前端若水6 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Bigger7 小时前
mini-cc:一个轻量级 AI 编程助手的诞生
前端·ai编程·claude
涵涵(互关)7 小时前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态7 小时前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态7 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart7 小时前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter
放下华子我只抽RuiKe57 小时前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架