前言:
这是我的做法,基本上是搬运官方的办法照葫芦画瓢,我也不知道有没有更好的方法能拿到 tree组件的实例
element-tree 增加节点的方法
如果在模板中定于了 <el-tree>
的数据源如下:
<el-tree :data="nodeData"></el>
那么在当前Vue组件实例中定义并初始化数据源
export default {
name: 'Tree',
data(){
return{
nodeData: [
{
id:999,
labelName:"root",
children:[]
}
],
}
}
}
那么在该 Node.data
对象中就具有以三个属性:
所以,如果要给节点设置data
(数据源),就只要给节点加入data
,下面演示加入data
的操作
首先,先设置数据源
let newChild = {};
newChild = {
id: nodeKeyId += 1, //假设nodeKeyId 已经定义,值可以是动态的
labelName: "Module", //静态值
children: [],
nodeType:"" //也可以在 newChild对象中加入其它属性
};
其次,我们来观察官方解释追加子节点的方法
append()
为 Tree 中的一个节点追加一个子节点,接收两个参数(data
,parentNode
)
- 要追加的子节点的 data
- 子节点的 parent 的 data、key 或者 node
既然参数解决了,那么方法就是:使用push
方法增加数据源。
在此处我们传的是 node
, 此处的 node
也就是 你要插入的节点的 parent(在该node
下插入)
append(node){
let data = node.data
/*前提检查,节点需要有children,用于存储子节点的数据源*/
if (!data.children) { //如果data.children为空
this.$set(data, 'children', []); //在data中增加 children属性,并初始化为数组
}
data.children.push(newChild); //将你要设置的数据源存储在 parentNode.data.children下
}
Vue中从后台读取后渲染element-tree
如果想在加载后马上渲染,需要指定渲染函数 :render-content="renderContent"
<el-tree :render-content="renderContent" />
renderContent
保存 root节点就行
export default{
data(){
return{
thatNode:Object
}
},
methods:{
renderContent(h,{node,data}){
if (node.level === 1)
{
//在无法得到 node 的情况下,往vue实例中保存一个 node,便于进行首次渲染后台来的数据时使用
this.thatNode = node;
}
}
}
}
之后就能用
this.thatNode
进行各种操作了
然后在 mounted
函数里面 写遍历,读Vuex store.state,再使用上面介绍的push
方法 就行