el-tree叶子节点横向排列

需求:底层节点横向排列

解决想法来自博客: https://blog.csdn.net/weixin_45899022/article/details/104607542
但具体实现有所不同

上述博文直接给出了源代码,这里直接调重点以及加点个人的想法进来:

首先说一下这里难以解决的点及解决思路:

​ el-tree组件元素嵌套层数多,而对外暴露的唯一元素是最里层的,所以我们去修改我们放在插槽里的东西的样式的时候影响不到外面,而CSS是不支持向上访问的( 那很容易乱套 ),所以我们只能求助与JS去获取父元素来完成这个需求。

​ 然后我们需要去判别元素是否位于底层,但是经尝试、发现在前端去判断层数效率相当低下且复用性很不好,建议还是在后端加一个字段去控制某一层是否需要横向排列。

这里我用到的字段是data上的is_row,值为boolean类型,为true时横向排列,为false时原生排列

// 附上data格式:
 data: [
        {
          id: 1,
          name: '一级 1',
          is_row: false,
          children: [
          	{
          		id: 11,
         		 	name: '二级 1',
          		is_row: true,
          	}]
        }]

于是借助开头连接对应的博客,有以下解决方法:

// 在tree插槽中进行class添加:
  <el-tree
    ref="tree"
    :data="data"
    :props="{ label: 'name' }"
    default-expand-all
    :show-checkbox="needCheck"
    node-key="id"
  >
    <div
      slot-scope="{ node, data }"
      :class="data.is_row ? 'need-float' : ''"
    >
      <!-- 真的需要在前端控制层数的话可以在class中判断node.level的值,e.g:
				<div
      		slot-scope="{ node, data }"
      		:class="node.level===3 ? 'need-float' : ''"
    		>
   				{{ node.label }}
    		</div>

					判断情况更为复杂的时候可以  :class="getClass(node)"  然后在js中进行判断复制,这就不再赘述啦
					但还是建议将控制参数交给后端 , 兼容性相对强不少,多少层都OK,那层需要加哪里			
				-->

      {{ node.label }}
    </div>
  </el-tree>
// 在methodes中定义一个控制样式的方法:
// 修改叶子节点样式
    changeStyle() {
      var leafNode = document.getElementsByClassName('need-float');
      for (var i = 0; i < leafNode.length; i++) {
        leafNode[i].parentNode.style.cssFloat = 'left';
      }
    },
    
//在mounted中调用该方法:
    this.changeStyle();
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值