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


    前言

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

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

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

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

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

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

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

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

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

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

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

    1. <template>
    2. <div class="box">
    3.  
    4.   <el-tree
    5.     ref="myTree"
    6.     node-key="id"
    7.     :data="data"
    8.     :props="defaultProps"
    9.     :default-checked-keys="checkedkeys"
    10.   >
    11.   el-tree>
    12. div>
    13. template>
    14. <script>
    15. export default {
    16. data() {
    17.   return {
    18.     // 树形结构数据
    19.     data: [
    20.       {
    21.         id: "0p150",
    22.         name: "深圳QQQQ科技有限公司",
    23.         children: [
    24.           {
    25.             id: 12070579,
    26.             name: "一楼",
    27.             parentId: 0,
    28.             orderNum: null,
    29.           },
    30.           {
    31.             id: 12075624,
    32.             name: "二楼",
    33.             parentId: 0,
    34.             orderNum: null,
    35.           },
    36.         ],
    37.       },
    38.       {
    39.         id: "0p151",
    40.         name: "wertw",
    41.         children: [],
    42.       },
    43.       {
    44.         id: "0p152",
    45.         name: "qqqqq",
    46.         children: [
    47.           {
    48.             id: 120725697,
    49.             name: "一楼",
    50.             parentId: 0,
    51.             orderNum: null,
    52.           },
    53.           {
    54.             id: 1207236195,
    55.             name: "二楼",
    56.             parentId: 0,
    57.             orderNum: null,
    58.           },
    59.         ],
    60.       },
    61.       {
    62.         id: "0p154",
    63.         name: "1231",
    64.         children: [],
    65.       },
    66.       {
    67.         id: "0p155",
    68.         name: "123",
    69.         children: [],
    70.       },
    71.       {
    72.         id: "0p156",
    73.         name: "123123",
    74.         children: [],
    75.       },
    76.     ],
    77.     // 树形结构数据配置
    78.     defaultProps: {
    79.       id: "id",
    80.       label: "name",
    81.       children: "children",
    82.     },
    83.     //
    84.     checkedkeys: [],
    85.   };
    86. },
    87. // 侦听器
    88. watch: {
    89.   checkedkeys: {
    90.     // immediate: true,
    91.     handler: function (newVal, oldVal) {
    92.       if (newVal) {
    93.         this.$nextTick(() => {
    94.           // tree树结构点击会加上下面这个类名
    95.           // 如果默认全部展开-那就会关闭
    96.           document.querySelector(".el-tree-node__content").click();
    97.         });
    98.       }
    99.     },
    100.   },
    101. },
    102. mounted() {
    103.   // 使用$nextTick 等页面加载完毕之后-在选中,防止加载顺序问题
    104.   this.$nextTick(function () {
    105.     // 通过ref找到树节点
    106.     // 通过树结构设置node-key
    107.     // 结果-选中第一个
    108.     this.checkedkeys.push(this.data[0].id);
    109.     // 结果固定id-选中第一个
    110.     // this.checkedkeys.push('0p150');
    111.     // 结果-子集选中第一个
    112.     // this.checkedkeys.push(12070579);
    113.     // 节点key 结果选中第一个
    114.     // this.checkedkeys.push(["0p150", 12070579]);
    115.   });
    116.   // 结论:不管传入什么,只会通过侦听器选中树结构第一个
    117. },
    118. };
    119. script>
    120. <style lang="scss" scoped>
    121. // 点击选中颜色
    122. style>

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

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

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

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

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

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

    1. <template>
    2. <div class="box">
    3.  
    4.  
    5.   <el-tree
    6.     ref="myTree"
    7.     node-key="id"
    8.     :data="data"
    9.     :props="defaultProps"
    10.     highlight-current
    11.     default-expand-all
    12.   >
    13.   el-tree>
    14. div>
    15. template>
    16. <script>
    17. export default {
    18. data() {
    19.   return {
    20.     // 树形结构数据
    21.     data: [
    22.       {
    23.         id: "0p150",
    24.         name: "深圳QQQQ科技有限公司",
    25.         children: [
    26.           {
    27.             id: 12070579,
    28.             name: "一楼",
    29.             parentId: 0,
    30.             orderNum: null,
    31.           },
    32.           {
    33.             id: 12075624,
    34.             name: "二楼",
    35.             parentId: 0,
    36.             orderNum: null,
    37.           },
    38.         ],
    39.       },
    40.       {
    41.         id: "0p151",
    42.         name: "wertw",
    43.         children: [],
    44.       },
    45.       {
    46.         id: "0p152",
    47.         name: "qqqqq",
    48.         children: [
    49.           {
    50.             id: 120725697,
    51.             name: "一楼",
    52.             parentId: 0,
    53.             orderNum: null,
    54.           },
    55.           {
    56.             id: 1207236195,
    57.             name: "二楼",
    58.             parentId: 0,
    59.             orderNum: null,
    60.           },
    61.         ],
    62.       },
    63.       {
    64.         id: "0p154",
    65.         name: "1231",
    66.         children: [],
    67.       },
    68.       {
    69.         id: "0p155",
    70.         name: "123",
    71.         children: [],
    72.       },
    73.       {
    74.         id: "0p156",
    75.         name: "123123",
    76.         children: [],
    77.       },
    78.     ],
    79.     // 树形结构数据配置
    80.     defaultProps: {
    81.       id: "id",
    82.       label: "name",
    83.       children: "children",
    84.     },
    85.   };
    86. },
    87. mounted() {
    88.   // 使用$nextTick 等页面加载完毕之后-在选中,防止加载顺序问题
    89.   this.$nextTick(function () {
    90.     // 通过ref找到树节点
    91.     // 通过树结构设置node-key,通过唯一id来高亮节点
    92.     // setCurrentKey-通过 key 设置某个节点的当前选中状态,使用此方法必须设置 node-key 属性
    93.     // 这行不会选中
    94.     this.$refs.myTree.setCurrentKey(this.data[0].id);
    95.     // 这行会生效
    96.     this.$refs.myTree.setCurrentKey(this.data[0].children[0].id);
    97.   });
    98. },
    99. };
    100. script>
    101. <style lang="scss" scoped>
    102. // 设置高亮颜色
    103. ::v-deep
    104. .el-tree--highlight-current
    105. .el-tree-node.is-current
    106. > .el-tree-node__content {
    107. background-color: #baf !important;
    108. }
    109. style>

    总结:

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

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

  • 相关阅读:
    LeetCode刷题系列 -- 678. 有效的括号字符串
    四川大学874考研真题00-23
    Vue之Jwt的运用(一起探索JWT在Vue中的用途吧)
    Java8新特性
    Webmin -- NFS
    【RocketMQ】RocketMQ5.0新特性(一)- Proxy
    element树形控件单选
    进阶JAVA篇- BigDecimal 类的常用API(四)
    Springboot+vue的机动车号牌管理系统(有报告)。Javaee项目,springboot vue前后端分离项目
    uni-app的来龙去脉,技术要点及技术难点,语法结构及应用场景,其实前端也很难,顶级的前端比后端都重要,感觉第一,理性第二
  • 原文地址:https://blog.csdn.net/weixin_53579656/article/details/132782324