一.前言
树形组件是我们经常用到的组件,主要场景就是:公司后台管理的部门管理,做文章目录等。
二.常用的几种方法及说明
1.node-click:节点被点击时的回调
共三个参数,依次为:传递给 data
属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身。
<div class="container">
<el-tree :data="data" show-checkbox node-key="id" ref="tree" highlight-current @node-click="clickFn"
@check="check"></el-tree>
</div>
clickFn (data, node, item) {
console.log(data);
console.log(node);
console.log(item);
}
2.check:当复选框被点击的时候触发
共两个参数,依次为:传递给 data
属性的数组中该节点所对应的对象、树目前的选中状态对象,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性
<div class="container">
<el-tree :data="data" show-checkbox node-key="id" ref="tree" highlight-current @node-click="clickFn"
@check="check"></el-tree>
</div>
check (checkedNodes, checkedKeys) {
// 获取选中节点的node对象
this.nodes = checkedKeys.checkedNodes;
for (let i = 0; i < this.nodes.length; i++) {
let a = this.$refs.tree.getNode(this.nodes[i].id);
console.log(a);
}
},
3.check-change:节点选中状态发生变化时的回调
共三个参数,依次为:传递给 data
属性的数组中该节点所对应的对象、节点本身是否被选中、节点的子树中是否有被选中的节点
4.getNode方法:根据 data 或者 key 拿到 Tree 组件中的 node
(data) 要获得 node 的 key 或者 data
getNode方法的用法:this.$refs.tree.getNode(this.nodes[i].id);
参数就是节点的id:就是node-key绑定的id
例如:node-key="name";this.$refs.tree.getNode(this.nodes[i].name);
具体看需求,前提是你树形data里面有这个属性
5.check-on-click-node
是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点。
6.default-expanded-keys
默认展开的节点的 key 的数组
三.我们实现标题中提到的需求主要用到check事件和getNode方法
check (checkedNodes, checkedKeys) {
console.log(checkedNodes);
console.log(checkedKeys);
// 获取选中节点的node对象
this.nodes = checkedKeys.checkedNodes;
for (let i = 0; i < this.nodes.length; i++) {
let a = this.$refs.tree.getNode(this.nodes[i].id);
console.log(a);
}
},