elementplus el-tree组件 选中多个节点持续高亮

需求: 回显数据的时候要把选中的节点全部高亮, 所以需要高亮多个节点, 但是elementplus好像只能高亮一个,利用文档中提供的render-content属性来设置

<el-tree
            :data="groupList"
            :expand-on-click-node="false"
            highlight-current
            node-key="id"
            :default-checked-keys="checkedList"
            :props="{ label: 'groupName' }"
            @node-click="handleSelect"
            :render-content="rendContent"
          >
 </el-tree>

//方法
const rendContent = (h, { node, data }) => {
  if (checkedList.value.length) {
    if (checkedList.value.indexOf(data.id) != -1) {
      return h(
        'span',
        {
          class: 'custom-tree-node highlight',
          style: 'width: 100%'
        },
        h('span', null, data.groupName)
      )
    } else {
      return h(
        'span',
        {
          class: 'custom-tree-node',
          style: 'width: 100%'
        },
        h('span', null, data.groupName)
      )
    }
  } else {

}

//样式
:deep(.highlight) {
  background-color: #efefef !important;
}

这样写是有问题的 虽然可以达到渲染背景色的效果 但是宽度无法撑满, 如下图

又去翻官网发现另一个属性

 于是更改为props.class写法代码如下

  <el-tree
            :data="groupList"
            :expand-on-click-node="false"
            highlight-current
            node-key="id"
            :default-checked-keys="checkedList"
            :props="{ label: 'groupName', class: customNodeClass }"
            @node-click="handleSelect"
          >
  </el-tree>

//方法
const customNodeClass = (data: Tree) => {
  if (checkedList.value.length) {
    if (checkedList.value.indexOf(data.id) != -1) {
      return 'is-penultimate'
    }
  }
  return null
}

//样式
//注: 这里要使用样式穿透不然不生效 
:deep(.is-penultimate) {
  background-color: #efefef !important;
}

更改前后对比图如下

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
el-tree组件默认选中节点的实现可以通过设置组件的default-checked-keys属性来实现。这个属性是一个数组,可以指定初始时需要默认选中节点的key值。当组件渲染时,会自动将对应key值的节点设置为选中状态。具体的实现代码如下所示: <template> <el-tree :data="treeData" :default-checked-keys="defaultCheckedKeys" :props="treeProps"> </el-tree> </template> <script> export default { data() { return { treeData: [ { id: 1, label: 'Node 1', children: [ { id: 11, label: 'Node 1-1' }, { id: 12, label: 'Node 1-2' } ] }, { id: 2, label: 'Node 2' } ], defaultCheckedKeys: [11] // 设置默认选中节点的key值 } }, computed: { treeProps() { return { children: 'children', // 设置children字段的属性名 label: 'label' // 设置label字段的属性名 } } } } </script> 在上述代码中,我们通过设置defaultCheckedKeys属性,将需要默认选中节点的key值传递给el-tree组件。这样,在组件渲染时,节点11就会被默认选中。你可以根据需要将defaultCheckedKeys属性设置为一个包含多个节点key值的数组来实现默认选中多个节点的功能。<span class="em">1</span> #### 引用[.reference_title] - *1* [vue el-tree 默认展开第一个节点的实现代码](https://download.csdn.net/download/weixin_38725450/12925996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值