使用el-tree 添加子节点 页面数据不渲染

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用el-tree 添加子节点 页面数据不渲染相关的知识,希望对你有一定的参考价值。

参考技术A 前言:最近一段时间耗时最长的bug,将解决过程分享给大家

1.首先后端返回树级数据

2.直接套用el-tree

3.绑定创建时间,接受一个2个参数

4.给省添加市时或者添加子节点时,判断当前有无子节点,没有的话使用this.$set添加,一点要请求接口让后端返回一个唯一标识

5.完成(怎么可能?就这最后一步,虽然有数据,就是渲染不到页面上)

el-tree不点击,根据后端数据,来显示高亮

第一步:给el-tree组件标签加上属性highlight-current开启高亮
在这里插入图片描述
加了这个属性,选中的节点的样式才会有highlight-current类,这样接下来才能改变选中的节点的样式。

第二步:在css中修改高亮样式
一个小tip:这里建议是给该页面文件最外层的div加个专有的类,比如我这个页面是“组织配置”,标签就加个class=“organization_configuration”,然后style里的样式全部写在.organization_configuration中,这样就不用加scoped了,也更符合vue组件化的开发思路
在这里插入图片描述

<style lang="less">
.organization_configuration

.el-tree--highlight-current
.el-tree-node.is-current
> .el-tree-node__content
// 设置颜色
background-color: rgba(135, 206, 235, 0.2); // 透明度为0.2的skyblue,作者比较喜欢的颜色
color: #409eff; // 节点的字体颜色
font-weight: bold; // 字体加粗

1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
来看一下页面效果:
在这里插入图片描述

如果想要的效果只是点击时高亮,失去焦点后变回原样的样式,就不用给标签加highlight-current属性了,直接修改css即可:

.el-tree-node:focus > .el-tree-node__content
background-color: rgba(135, 206, 235, 0.3);
color: #409eff; //节点的字体颜色
font-weight: bold;

1
2
3
4
5
1
2
3
4
5
指定默认高亮树节点,参考:点击链接
使用el-tree组件的setCurrentKey方法,根据树组件的树节点的唯一id来制定某个树节点高亮。当然要搭配node-key="id"给树节点绑定唯一标识id,同时也要开启高亮模式(加上highlight-current属性),然后方式一设置高亮的颜色样式要加上。初始化加载默认高亮,所以在mounted钩子中书写代码即可。

完整代码:

<template>
<div class="box">
<el-tree
ref="myTree"
node-key="id"
:data="data"
:props="defaultProps"
highlight-current
>
</el-tree>
</div>
</template>

<script>
export default
data()
return
data: [

name: "西游记",
id: "xiyouji",
children: [

name: "孙悟空",
id: "sunwukong",
children: [

name: "大猴子",
id: "dahouzi",
children: [],
,

name: "二猴子",
id: "erhouzi",
children: [],
,
],
,

name: "猪八戒",
id: "zhubajie",
children: [],
,

name: "沙和尚",
id: "shaheshang",
children: [],
,
],
,

name: "水浒传",
id: "shuihuzhuan",
children: [

name: "宋江",
id: "songjiang",
children: [],
,

name: "武松",
id: "wusong",
children: [],
,
],
,
],
defaultProps:
children: "children",
label: "name",
,
;
,
mounted()
this.$nextTick(function ()
this.$nextTick(() =>
// myTree 数组件的ref 默认让第一项高亮
// data是树组件对应的数据
// 通过data中的第一项的id找到对应的节点,然后把这个节点设置为高亮
this.$refs.myTree.setCurrentKey(this.data[0].id);
);
);
,
;
</script>
<style lang="less" scoped>
// 设置高亮颜色
/deep/ .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content
background-color: #baf !important;

</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
setCurrentKey方法是通过 key 设置某个节点的当前选中状态,使用此方法必须设置 node-key 属性,因为要确定唯一性,node-key="id"因为一般都是id具有唯一性,所以绑定id。
参考技术A 先需要明确地是,这个方案需要后端地配合,和后端约定一种格式用于标记字符串中需要特殊处理...这样就显示高亮了

以上是关于使用el-tree 添加子节点 页面数据不渲染的主要内容,如果未能解决你的问题,请参考以下文章

给元素添加子节点,元素子节点数改变,反过来影响上方调用其值的异步任务回调函数(如click。load,定时器等

给元素添加子节点,元素子节点数改变,反过来影响上方调用其值的异步任务回调函数(如click。load,定时器等

高手帮忙:sql 里怎样递归判断父节点和子节

element-ui el-tree选择子节点时同时选择并提交父节点逻辑问题

el-tree:如何实现自定义节点或者整体背景颜色自定义

el-tree半节点回显