vue el-tree添加层级指示线

1.div中放个tree

注意设置:  :indent="0",否则节点会出现较大缩进

 <div ref="treeDiv" class="tree-container">
    <el-tree id="tree" class="tree" @node-click="treeNodeClick"
             :indent="0"
             :props="defaultProps"
             :load="queryTreeNode"
             node-key="uniqueidentification" ref="tree" lazy>
    </el-tree>
  </div>

2.设置样式

注意:tree-container是tree父容器的class name,通过此方法设置tree的根节点样式

.tree-container /deep/ .el-tree > .el-tree-node:after {
  border-top: none;
}
<style scoped>

  .tree /deep/ .el-tree-node {
    position: relative;
    padding-left: 16px;
  }

  .tree /deep/ .el-tree-node__children {
    padding-left: 16px;
  }

  .tree /deep/ .el-tree-node :last-child:before {
    height: 38px;
  }

  .tree /deep/ .el-tree > .el-tree-node:before {
    border-left: none;
  }

  .tree-container /deep/ .el-tree > .el-tree-node:
### Vue El-Tree 组件中禁止选择第三层级节点的方法 为了实现在 `el-tree` 中禁止选择第三层级节点的功能,可以利用 `node-click` 事件来控制用户的交互行为。当点击某个节点时,判断该节点所在的层级,如果处于第三层,则阻止默认的选择操作。 具体实现方式如下: #### 方法一:通过监听 node-click 事件并取消冒泡 ```javascript <template> <div> <el-tree :data="treeData" @node-click="handleNodeClick"></el-tree> </div> </template> <script> export default { data() { return { treeData: [ // 树结构数据... ] }; }, methods: { handleNodeClick(data, node) { const level = node.level; if (level === 3) { // 如果是第3级节点 this.$message({ message: '无法选择第三层级节点', type: 'warning' }); event.stopPropagation(); // 阻止事件传播到父元素上触发选中效果 return false; // 返回false表示不执行后续逻辑 } } } }; </script> ``` 这种方法能够有效地拦截用户对于特定层次节点的操作请求,并给出提示信息告知用户当前不允许进行此操作[^1]。 #### 方法二:自定义 render-content 属性渲染函数 另一种更灵活的方式是在创建树形菜单的时候就入对每一项是否可被选中的属性设置,在模板里使用 `render-content` 来定制化显示内容的同时也处理好不可选项的状态管理。 ```html <template> <div> <el-tree :data="treeData" show-checkbox node-key="id" ref="tree"> <!-- 自定义每项的内容 --> <span slot-scope="{ node, data }" class="custom-tree-node"> <span>{{ node.label }}</span> <span v-if="!isThirdLevel(node)"> <el-button size="mini">按钮A</el-button> <el-button size="mini">按钮B</el-button> </span> </span> </el-tree> </div> </template> <script> import { Tree as ElTree } from 'element-ui'; export default { components: { ElTree }, computed: { isThirdLevel () { return function (node) { return node.level !== 3; } } }, mounted () { this.init(); }, methods: { init () { let that = this; setTimeout(() => { that.treeData.forEach((item, index) => { item.disabled = !that.isThirdLevel({ ...this.$refs.tree.getNode(item.id), label: item.name }); if (item.children && Array.isArray(item.children)) { item.children.forEach(childItem => { childItem.disabled = true; if (childItem.children && Array.isArray(childItem.children)) { childItem.children.forEach(grandChildItem => { grandChildItem.disabled = true; }) } }) } }) this.$forceUpdate(); }, 0); } } } </script> ``` 在这个例子中,通过计算属性 `isThirdLevel()` 判断节点级别,并据此决定哪些项目应该禁用。同时也可以根据实际需求调整样式或增其他功能性的按钮等。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值