Elementui el-tree 自定义节点内容、图标右移、修改某一节点对应背景色、展开或关闭所有节点等常用问题

默认展开某节点

设置node-key="id"
:default-expanded-keys="nodeKey"
nodeKey是数组,传入要展开节点对应的id

this.nodeKey.push(data[0].id);

默认选中左侧导航某节点

node-key="id"
:default-expanded-keys="nodeKey"
设置setCurrentKey,传入要选择节点的id

this.$nextTick(() => {
	this.$refs.tree.setCurrentKey(this.nodeKey[0])
})

默认关闭所有展开节点(不展开任何节点)

应用场景:点击某一按钮,关闭所有已展开节点。

  • 通过ref找到节点的store属性获取所有节点的集合数组nodesMap
for(let key in this.$refs.tree.store.nodesMap) {
	this.$refs.tree.store.nodesMap[key].expanded = false
}

去除子节点缩进

  • 设置:indent="0"

自定义节点内容、设置某一节点对应的背景色

  • 使用slot,找到要修改内容对应的class,(F12查找)例如下面例子 el-tree-node、custom-tree-node,找到这些elementui自带的class,使用插槽进行修改。我这里主要想在标题右侧显示对应的条数和设置某个节点的背景颜色,slot完美解决。
  • 使用slot,可以自己设置各种图标、怎么显示等问题!!超级好用呜呜呜
<!-- indent:相邻级节点间的水平缩进,单位为像素 -->
<el-tree 
	ref="tree"
	:data="navData" 
	:props="defaultProps" 
	@node-click="handleNodeClick" 
	:indent="18"
	node-key="id"
	:accordion="true">
	<!-- 
	:render-content="renderContent" 
	:highlight-current="true"
	:default-expanded-keys="nodeKey"
	-->
	<!-- 自定义节点内容 -->
	<div class=" el-tree-node"  slot-scope="{ node, data }" style="margin-bottom: 10px;">
		<div v-if="node.level == 1">
			<!-- 父标题样式 -->
			<div class=" el-tree-node__content" style="background: #fff;color: #333333">
				<span class="custom-tree-node">
					<span>
						<img width="18px" height="18px" class="vertical-align" src="../../../../public/img/assetCatalogue/icon-title.png" alt="">
						<span class="vertical-align" style="margin-left:10px;text-align: left;width: 105px;display: inline-block;">
							{{ node.label}}
						</span>
						<span class="vertical-align" style="text-align: right;">
							{{data.dataNum}}
						</span>
					</span>
				</span>
			</div>
		</div>
		<div v-else>
			<div class=" el-tree-node__content">
				<span class="custom-tree-node">
					<span style="margin-left: 10px;">
						<span style="text-align: left;width: 105px;display: inline-block;">
							{{ node.label}}
						</span>
						<span style="text-align: right;">
							{{data.dataNum}}
						</span>
					</span>
				</span>
			</div>
		</div>
	</div>
</el-tree>

三角图标右移/收缩、展开样式改变

>>>.el-tree-node__expand-icon {
	position: absolute;
	right: 2%;
}

完整代码和效果图

<template>
	<el-row class="asset-catalogue-nav">
		<el-row>
			<div class="data-theme point-click" @click="changeTreeNodeStatus()">
				<img class="float-left" style="margin-right: 10px;margin-top: 7px;" src="../../../../public/img/assetCatalogue/icon-theme.png" alt="">
				<div class="float-left">数据主题</div>
				<div class="float-right one-overflow" style="width: 60px;text-align: right;">{{countData}}</div>
			</div>
		</el-row>
		<!-- indent:相邻级节点间的水平缩进,单位为像素 -->
		<el-tree 
			ref="tree"
			:data="navData" 
			:props="defaultProps" 
			@node-click="handleNodeClick" 
			:indent="18"
			node-key="id"
			:accordion="true">
			<!-- 
			:render-content="renderContent" 
			:highlight-current="true"
			:default-expanded-keys="nodeKey"
			-->
			<!-- 自定义节点内容 -->
			<div class=" el-tree-node"  slot-scope="{ node, data }" style="margin-bottom: 10px;">
				<div v-if="node.level == 1">
					<!-- 父标题样式 -->
					<div class=" el-tree-node__content" style="background: #fff;color: #333333">
						<span class="custom-tree-node">
							<span>
								<img width="18px" height="18px" class="vertical-align" src="../../../../public/img/assetCatalogue/icon-title.png" alt="">
								<span class="vertical-align" style="margin-left:10px;text-align: left;width: 105px;display: inline-block;">
									{{ node.label}}
								</span>
								<span class="vertical-align" style="text-align: right;">
									{{data.dataNum}}
								</span>
							</span>
						</span>
					</div>
				</div>
				<div v-else>
					<div class=" el-tree-node__content">
						<span class="custom-tree-node">
							<span style="margin-left: 10px;">
								<span style="text-align: left;width: 105px;display: inline-block;">
									{{ node.label}}
								</span>
								<span style="text-align: right;">
									{{data.dataNum}}
								</span>
							</span>
						</span>
					</div>
				</div>
			</div>
		</el-tree>
	</el-row>
</template>
<script>
//此处省略写
data: [{
	label: '一级 1',
	children: [{
		label: '二级 1-1'
	}]
}, {
	label: '一级 2',
	children: [{
		label: '二级 2-1'
	}, {
		label: '二级 2-2'
	}]
}, {
	label: '一级 3',
	children: [{
		label: '二级 3-1'
	}, {
		label: '二级 3-2'
	}]
}],
defaultProps: {
	children: 'children',
	label: 'label'
}
</script>
<style lang="scss" scoped>
	.asset-catalogue-nav {
		margin-top: 10px;
		
		/* 小三角图标右移 */
		>>>.el-tree-node__expand-icon {
			position: absolute;
			right: 2%;
			font-size: 18px;
		}
		
		// 鼠标hover悬浮背景色
		>>>.el-tree-node__content{
		  display: block; //默认使用flex布局 此处需要设置父标题背景颜色因此改为block
		  height: 40px;
		  line-height: 40px;
		  &:hover{
		    color: #1067EE;
			background-color: #F6F7FB;
		  }
		}
		
		/* 点击树结构项的选中颜色 */
		>>> .el-tree-node.is-current>.el-tree-node__content {
			color: #1067EE;
			background-color: #F6F7FB;
		}
		/* 拖拽时失焦节点颜色 */
		>>> .el-tree-node:focus > .el-tree-node__content {
			color: #063972 ;
			background-color: #F5F5F5;
		}
		
		/* 三角图标 收缩 */
		>>> .el-tree-node__content>.el-tree-node__expand-icon {
		    margin-top: 5px;
			-webkit-transform: rotate(-90deg);
			transform: rotate(-90deg);
		}
		/* 三角图标 展开 */
		>>> .el-tree-node__content>.el-tree-node__expand-icon.expanded {
		    -webkit-transform: rotate(90deg);
		    transform: rotate(90deg);
		}
	}
	.data-theme {
		background-color:#F6F7FB;
		color: #1067EE;
		font-size: 20px;
		height: 40px;
		line-height: 40px;
		padding-right: 10px;
		border-radius: 3px 3px 0px 0px;
	}
</style>

在这里插入图片描述

后续开辟什么新领域再继续补充(╹▽╹)

  • 14
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值