element-tree树结构-默认选中第一个节点高亮-根据id选中节点高亮

2023-11-19

前言

  • tree树结构是在开发中经常使用的组件,比如区域树,楼层树,组织架构树,等等包含节点关系

  • 实际开发可能需要我们一进到页面选中树形结构第一个节点,并且调用数据,来达到用户体验

  • 在用户选择之后,通过本地存储的方式把楼层id存起来,刷新之后获取楼层id,调用数据

  • 或者为了用体验我们需要在选中同时高亮,在状态保持之后,把绑定楼层id节点高亮提示用户

  • 万变不离其宗,基于文档介绍和HTML结构代码。我们可以通过2种办法实现

第一种-利用默认点击选中会增加类名

  • 当我们打开浏览器检查会发现,当树节点点击之后。会在该节点添加一个类名

  • 当我们配置好树形结构唯一值,默认选中数组,ref之后我们可以通过在获取楼层数据之后赋值,再通过侦听器来侦听,当察觉默认数组复制之后,就通过document找到这个类名,点击它,就会默认选中第一个

  • 注意:使用this.$nextTick()避免出现层级问题

  • 缺点:不管传入什么值-只会选中第一个。应为是点击还会触发树结构自带的收缩

案例代码如下-可直接复制

<template>
  <div class="box">
    <!-- default-checked-key-默认勾选的节点的 key 的数组 -->
    <el-tree
      ref="myTree"
      node-key="id"
      :data="data"
      :props="defaultProps"
      :default-checked-keys="checkedkeys"
    >
    </el-tree>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      // 树形结构数据
      data: [
        {
          id: "0p150",
          name: "深圳QQQQ科技有限公司",
          children: [
            {
              id: 12070579,
              name: "一楼",
              parentId: 0,
              orderNum: null,
            },
            {
              id: 12075624,
              name: "二楼",
              parentId: 0,
              orderNum: null,
            },
          ],
        },
        {
          id: "0p151",
          name: "wertw",
          children: [],
        },
        {
          id: "0p152",
          name: "qqqqq",
          children: [
            {
              id: 120725697,
              name: "一楼",
              parentId: 0,
              orderNum: null,
            },
            {
              id: 1207236195,
              name: "二楼",
              parentId: 0,
              orderNum: null,
            },
          ],
        },
        {
          id: "0p154",
          name: "1231",
          children: [],
        },
        {
          id: "0p155",
          name: "123",
          children: [],
        },
        {
          id: "0p156",
          name: "123123",
          children: [],
        },
      ],
      // 树形结构数据配置
      defaultProps: {
        id: "id",
        label: "name",
        children: "children",
      },
      //
      checkedkeys: [],
    };
  },
  // 侦听器
  watch: {
    checkedkeys: {
      // immediate: true,
      handler: function (newVal, oldVal) {
        if (newVal) {
          this.$nextTick(() => {
            // tree树结构点击会加上下面这个类名
            // 如果默认全部展开-那就会关闭
            document.querySelector(".el-tree-node__content").click();
          });
        }
      },
    },
  },
  mounted() {
    // 使用$nextTick 等页面加载完毕之后-在选中,防止加载顺序问题
    this.$nextTick(function () {
      // 通过ref找到树节点
      // 通过树结构设置node-key
      // 结果-选中第一个
      this.checkedkeys.push(this.data[0].id);
      // 结果固定id-选中第一个
      // this.checkedkeys.push('0p150');
      // 结果-子集选中第一个
      // this.checkedkeys.push(12070579);
      // 节点key 结果选中第一个
      // this.checkedkeys.push(["0p150", 12070579]);
    });
​
    // 结论:不管传入什么,只会通过侦听器选中树结构第一个
  },
};
</script>
<style lang="scss" scoped>
// 点击选中颜色
</style>

第二种方法-通过高亮属性+tree提供api-推荐

  • 当我们配置好树结构唯一值,高亮当前节点属性,ref之后,

  • 我们在获取属性结构数据地方取第一个数据id,传入api,就可以高连当前节点

  • 注意:使用this.$nextTick()避免出现层级问题

  • 优点:只需要树形结构唯一值id传入api就可以实现选中树形结构任意节点并且高亮-符合实际开发

案例代码如下-可直接复制

<template>
  <div class="box">
    <!-- default-expand-all-展开全部 -->
    <!-- highlight-current- 是否高亮当前选中节点 -->
    <el-tree
      ref="myTree"
      node-key="id"
      :data="data"
      :props="defaultProps"
      highlight-current
      default-expand-all
    >
    </el-tree>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      // 树形结构数据
      data: [
        {
          id: "0p150",
          name: "深圳QQQQ科技有限公司",
          children: [
            {
              id: 12070579,
              name: "一楼",
              parentId: 0,
              orderNum: null,
            },
            {
              id: 12075624,
              name: "二楼",
              parentId: 0,
              orderNum: null,
            },
          ],
        },
        {
          id: "0p151",
          name: "wertw",
          children: [],
        },
        {
          id: "0p152",
          name: "qqqqq",
          children: [
            {
              id: 120725697,
              name: "一楼",
              parentId: 0,
              orderNum: null,
            },
            {
              id: 1207236195,
              name: "二楼",
              parentId: 0,
              orderNum: null,
            },
          ],
        },
        {
          id: "0p154",
          name: "1231",
          children: [],
        },
        {
          id: "0p155",
          name: "123",
          children: [],
        },
        {
          id: "0p156",
          name: "123123",
          children: [],
        },
      ],
      // 树形结构数据配置
      defaultProps: {
        id: "id",
        label: "name",
        children: "children",
      },
    };
  },
  mounted() {
    // 使用$nextTick 等页面加载完毕之后-在选中,防止加载顺序问题
    this.$nextTick(function () {
      // 通过ref找到树节点
      // 通过树结构设置node-key,通过唯一id来高亮节点
      // setCurrentKey-通过 key 设置某个节点的当前选中状态,使用此方法必须设置 node-key 属性
      // 这行不会选中
      this.$refs.myTree.setCurrentKey(this.data[0].id);
      // 这行会生效
      this.$refs.myTree.setCurrentKey(this.data[0].children[0].id);
    });
  },
};
</script>
<style lang="scss" scoped>
// 设置高亮颜色
::v-deep
  .el-tree--highlight-current
  .el-tree-node.is-current
  > .el-tree-node__content {
  background-color: #baf !important;
}
</style>

总结:

经过这一趟流程下来相信你也对 element-tree树结构-默认选中第一个节点高亮-根据id选中节点高亮 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

什么不足的地方请大家指出谢谢 -- 風过无痕

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

element-tree树结构-默认选中第一个节点高亮-根据id选中节点高亮 的相关文章

  • Vue.JS 可以与 AJAX http 调用一起使用吗?

    我正在尝试从 HTML 中执行以下操作 var vm new Vue el loginContent data main message Login isLoggedIn false loginError loginButton Login
  • workbox webpack 插件从预缓存清单中排除文件夹

    我正在将 workbox webpack 插件与 vue cli 3 一起使用 并且我想将文件夹中的文件排除在外 以免添加到预缓存清单中 请参阅下面我当前的文件结构 src 资产 CSS 壳文件1 svg文件2 svg文件3 svg svg
  • 是否可以限制用户登录 Firebase 应用的设备数量?

    语境 我正在帮助使用 Vue 更新 Cordova 应用程序 以从基于订阅的收入 用户必须付费才能访问该应用程序 转变为基于广告的收入 用户可以免费注册 但将拥有他们在使用应用程序时显示的广告 我们想要做的一部分是限制用户可以拥有帐户的设备
  • 如何在 vue 模板中使用 `console.log` 或 `console.error`?

    我有一个 vue 组件
  • 如何在Vuejs中动态管理页面标题?

    我构建一个应用程序 我有一个带有页面标题的标题 目前 我使用视图路由器来定义我的标题 path events name events component Events meta title Liste des v nements 在我的刀片
  • 如何以编程方式添加 Vue 3 组件?

    Vue 3 没有 Vue extend 方法 因此这里的示例不起作用 https css tricks com creating vue js component instances programmatically https css t
  • 将 VueJs 组件添加到 Django 模板中

    我正在开发一个 Django 网站 我希望将一些 Vue 组件 散布 到 Django 渲染的模板中 我正在单个存储库中工作 并使用 webpack 设置来创建我在 Django 模板中使用的 style js 包 我正在努力让功能按照我想
  • firestore 安全规则 request.auth.uid 不起作用

    Firestore 安全规则不起作用 帮我 无法读取用户 用户 ID 的文档数据 安全规则 service cloud firestore match databases database documents match users use
  • 使用 vue.js 显示 json 结果

    您好 我尝试使用 vue js 显示 json 文件结果 目标是结果将显示在值上 这是我的代码 data return fetchData function var self this self http get api casetotal
  • node.js、vue.js 和express.js 堆栈开发

    我正在尝试使用 Linux 上的 Visual Studio Code IDE 使用 vue js express js 和 node js 创建一个 Web 应用程序 根据网上的一些文档 我读到安装 vue js 后 可以创建一个vue
  • 模拟安装挂钩 Jest 测试装置

    我正在对组件进行一些单元测试 但是 在某些组件中 我有一些东西在运行mounted使我的测试失败的钩子 我设法模拟了我不需要的方法 但是 我想知道是否有一种解决方法可以模拟mounted钩住自己 components attendeesLi
  • Laravel Echo 不监听推送事件

    尝试使用 laravel 和 vuejs 创建一种聊天应用程序 发送消息后 我会从 laravel 触发事件 该事件会使用正确的事件类反映在推送器调试控制台上 但根本不会调用来自 vuejs 的监听回调 created window Ech
  • VueJS - 访问已安装的存储数据

    我无法理解以下内容 我有一个store其中包含应用程序所需的变量 特别地 有一个globalCompanies哪些商店 globalCompanies current all currentName 在另一个组件中 我想执行以下操作 mou
  • 在 ES6 中使用 import 和 require 的正确方法是什么?

    关于 import 和 require 及其差异有多个问题 像这些 JavaScript 中的 import 和 require 有什么区别 https stackoverflow com questions 51373933 what i
  • Vue.js 更改 {{ }} 标签

    我想改变 something by 在 Vue js 中 我怎样才能实现这一点 这可能吗 我在 AngularJS 中寻找的等效项 var app angular module app function interpolateProvide
  • vue如何检测页面是否刷新?

    我尝试这样 created window addEventListener beforeunload function event event returnValue Write something this router push 像这样
  • 如何将 Jitsi Meet 添加到 Vuejs

    我已在 public html 的正文中加载了 jitsi meet 脚本 并且我有一个组件 如下所示
  • 从组件传递数据

    我对 Vue 相当陌生 我正在尝试将数据从组件传递到视图 我不确定我是否在使用props正确的 我有一个对话框 当我保存时 我想将数据插入数据库 我也想重复使用addCustomer function 这就是为什么我没有将该函数放置在组件中
  • Vue js动态导入组件

    我有以下父组件 它必须呈现动态子组件列表
  • Laravel Vue 组件只能传递数字?

    在我的 UserMenu vue 中我写道 export default props nameVal data return 并在blade php中

随机推荐

  • 3D游戏编程与设计作业4——使用skybox构建游戏场景

    步骤1 首先下载支持使用Fantacy Skybox FREE 的Unity版本 2021 3 步骤2 打开unity store 搜索Fantacy Skybox FREE 并进行下载 步骤3 下载成功后import对应的包到项目中 步骤
  • 多进程中fork

    linux下多进程 fork 这里只是简单实用fork 大家想了解具体 欢迎到我的gitee 给个star include
  • Android APK反编译教程

    目录 一 反编译工具 二 注意事项 三 apktool 1 1 官方链接 1 2 下载安装 1 3 使用 四 dex2jar 1 1 官方链接 1 2 下载安装 1 3 使用 五 jd gui 1 1 官方链接 1 2 下载安装 1 3 使
  • 百度广告联盟代码优化

    再分享一下我老师大神的人工智能教程吧 零基础 通俗易懂 风趣幽默 还带黄段子 希望你也加入到我们人工智能的队伍中来 https blog csdn net jiangjunshow
  • 关于Delphi的时间格式,图片处理的一些常用操作

    1 delphi 将字符串转换为时间 可以通过TFormatSettings 类来设置 FSetting ShortDateFormat yyyy MM dd FSetting DateSeparator DateTime1 StrToDa
  • vue若依前端项目搭建

    1 项目搭建 首先进入到你需要创建的项目目录下面 然后输入命令vue create 创建项目 接下来选择手动搭建 然后把下面图片中的内容选上 再然后继续配置一些参数信息 接下来运行npm run serve项目就启动起来了 2 配置登录界面
  • 【学习】若依源码(前后端分离版)之 “ 上传图片功能实现”

    大型纪录片 学习若依源码 前后端分离版 之 上传图片功能实现 前言 前端部分 后端部分 结语 前言 图片上传也基本是一个项目的必备功能了 所以今天和大家分享一下我最近在使用若依前后端分离版本时 如何实现图片上传功能的经验和心得 前端部分 在
  • 服务器硬件知识普及篇(需要配置服务器的朋友可以参考)

    开篇一 服务器主板 服务器主板概述 对于服务器而言 稳定性才是首要 服务器必须承担长年累月高负荷的工作要求 而且不能像台式机一样随意的重起 为了提高起可靠性普遍的做法都是部件的冗余技术 而这一切的支持都落在主板的肩上 下面我就来看看有关服务
  • JAVA word转pdf各个版本都支持,aspose-words

    以下提供两种方法实现 建议使用aspose 一 第一种 使用aspose words Word转PDF 第一步 首先需要下载aspose words 15 8 0包 官方的地址很慢 并且包下载不下来 有需要可以去GITHUB上寻找 这里我提
  • async/await处理多个异步请求

    async await 处理异步操作 axios defaults baseURL http localhost 9999 async function queryData let result await axios get adata
  • 使用MyEclipse创建JSP页面的一般步骤

    一 MyEclipse下建立点 当然事先JDK以及Tomcat以及装好 在包资源管理器中 新建Web Project 站点名称 MyJSP2 选择当前站点的工作目录 默认是我们打开MyEclipse时设置的工作目录 在这里也可以修改 最好是
  • 关于写死bootargs实例

    文章目录 1 说明 2 举例 3 原理 1 说明 1 附加的内核命令行 cmdline BOARD KERNEL CMDLINE 在build core Makefile中 有以下一段内容 strip起到去除空格的作用 BOARD KERN
  • 2020-03-12 git分支

    1 git c 配置 git c
  • mysql怎么生成ER_navicat怎么生成er

    Navicat软件真是一个好东西 今天需要分析一个数据库 然后想看看各个表之间的关系 所以需要查看表与表之间的关系图 专业术语叫做ER关系图 默认情况下 Navicat显示的界面是这样的 软件将表当做一个对象 然后显示了所有的表 仅仅通过这
  • 进程同步之信号量机制(pv操作)及三个经典同步问题

    1 信号量机制 信号量机制即利用pv操作来对信号量进行处理 什么是信号量 信号量 semaphore 的数据结构为一个值和一个指针 指针指向等待该信号量的下一个进程 信号量的值与相应资源的使用情况有关 当它的值大于0时 表示当前可用资源的数
  • 将控制台内容重定向至文件

    使用os system command 等模块执行系统命令时 返回值为命令执行结果 命令执行成功返回Ture 否则返回False 若要得命令本身返回的内容 需要将命令输出至控制台的内容写到文件中 即将标准输出由控制台重定向至文件 将控制台内
  • element时间选择器的默认值

    概览 vue使用element组件 需要给时间选择器设置默认值 场景一 默认时间选择器 场景二 时间范围选择器 开始时间和结束时间 一 默认时间选择器 实现思路 element组件的v model绑定的数据变化 则时间选择器的默认值变化 可
  • element-ui对话框dialog详解

    效果展示 先给大家展示一下大致的样式 代码
  • 删除卡在C盘和D盘之间的恢复盘

    依次点击 此电脑 gt 管理 gt 磁盘管理 可以看到上图中C盘和D盘之间有一个恢复分区 导致即使删除D盘 C盘也无法进行拓展 并且中间的分区是没法右键删除的 搜索 cmd 右键以管理员方式运行 输入命令删除恢复盘 Microsoft Wi
  • element-tree树结构-默认选中第一个节点高亮-根据id选中节点高亮

    前言 tree树结构是在开发中经常使用的组件 比如区域树 楼层树 组织架构树 等等包含节点关系 实际开发可能需要我们一进到页面选中树形结构第一个节点 并且调用数据 来达到用户体验 在用户选择之后 通过本地存储的方式把楼层id存起来 刷新之后