element-ui tree某些特定节点横向排列解决方案

element-ui tree某些特定节点横向排列解决方案本文介绍了两种方法在 Element UI 中将树形组件节点横向显示并定制样式

方法一:

在这里插入图片描述

<template> <div class="container"> <div class="routeList-box" v-for="(item,index) in routeList" :key="index"> <el-collapse v-model="activeNames"> <el-collapse-item :title="item.title" :name="index"> <el-tree class="el-tree" :data="item.list" :render-content="renderContent" show-checkbox node-key="id" ref="tree" highlight-current @node-expand="handleExpand" :props="defaultProps" ></el-tree> </el-collapse-item> </el-collapse> </div> </div> </template> <script> export default { data() { return { routeList: [ { title: "授权管理后台", list: [ { id: 1, label: "京店宝", children: [ { id: 2, label: "用户分析", children: [ { id: 4, label: "查询次数", children: [ { id: 7, label: "页面查看权限" }, { id: 8, label: "编辑" } ] }, { id: 5, label: "次数分布", children: [ { id: 9, label: "次数分布child1" }, { id: 10, label: "次数分布child2" } ] } ] }, { id: 3, label: "系统性能", children: [ { id: 6, label: "所用时间", children: [ { id: 7, label: "页面查看权限" } ] } ] } ] }, { id: 111, label: "有品库", children: [ { id: 112, label: "用户数" } ] } ] } ], defaultProps: { children: "children", label: "label" } }; }, mounted() { this.changeCss(); }, methods: { handleExpand() {//节点被展开时触发的事件 //因为该函数执行在renderContent函数之前,所以得加定时 setTimeout(() => { this.changeCss(); }, 10); }, renderContent(h, { node, data, store }) {//树节点的内容区的渲染 Function let classname = ""; // 由于项目中有三级菜单也有四级级菜单,就要在此做出判断 if (node.level === 4) { classname = "foo"; } if (node.level === 3 && node.childNodes.length === 0) { classname = "foo"; } return h( "p", { class: classname }, node.label ); }, changeCss() { var levelName = document.getElementsByClassName("foo"); // levelname是上面的最底层节点的名字 for (var i = 0; i < levelName.length; i++) { // cssFloat 兼容 ie6-8 styleFloat 兼容ie9及标准浏览器 levelName[i].parentNode.style.cssFloat = "left"; // 最底层的节点,包括多选框和名字都让他左浮动 levelName[i].parentNode.style.styleFloat = "left"; levelName[i].parentNode.onmouseover = function() { this.style.backgroundColor = "#fff"; }; } } } }; </script> <style lang="scss" scoped> .container { padding: 40px; } .routeList-box { border-left: 1px solid #eee; border-right: 1px solid #eee; margin-bottom: 20px; .el-tree { margin: 12px 0; } /deep/.el-collapse-item__header { height: 40px; background-color: #f4f4f4; padding: 0 10px; } /deep/.el-icon-arrow-right:before { color: #409eff; } } /deep/ .el-tree-node__content::before { content: ""; padding-left: 10px; } /deep/.el-checkbox__input { margin-right: 6px; } </style> 

转载于:https://www.freesion.com/article//

方法二:

先来个Element-UI的文档四连看

 

 

 

后端返回的数据

 

在这里可以看到普通节点和功能节点之间的区别是一个perms为空 一个是有数据的(我们可以用这个来区分节点),然后根据节点来改样式

主要代码



 

//修改节点Dom     renderContent(h, { node, data }) {       let className = ''       // perms这个是后台数据区分普通tree节点和横向tree节点的标志  各位要根据实际情况做相对应的修改       if (data.perms && data.perms !== '1') {         className = 'especially'       }       return (         // 在需要做横向排列的模块做标记         <div class={className}>           {data.label}         </div>)     },     // 改变tree节点样式     changeTreeClass() {       // 找到之前做标记的class       var classDomList = document.getElementsByClassName('especially')       // 改变这几个样式       for (var i = 0; i < classDomList.length; i++) {         classDomList[i].parentNode.style.cssText = 'float: left'         classDomList[i].parentNode.className = 'el-tree-node__content option-wrapper'         classDomList[i].parentNode.parentNode.parentNode.style.marginLeft = '70px'       }     } // changeTreeClass()这个方法要在渲染完tree节点之后调用 // 需要添加的全局样式 .option-wrapper { padding: 0 !important; }  

好了,到了这一步基本完成了。说下要注意的点吧!

1.数据节点的判别方法不一样,要根据不同的数据来选择区分方式。

2.判断节点方式一定要唯一,不唯一的话可能会造成多层节点重叠的情况发生。

3.changeTreeClass()这个方法要在渲染完tree节点之后调用
转载于:https://www.bianchenghao.cn/p/f740e8c9fca6
 

今天的文章 element-ui tree某些特定节点横向排列解决方案分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-04 17:21
下一篇 2025-01-04 17:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/101503.html