el-tree的节点全部折叠及展开
网上的都没解决,什么
方案一:
目的前提:ref="tree", _getAllNodes() 想拿到这个数本身的节点,所以有了下面的:
this.defaultExpand=false;
for(var i=0;i<this.$refs.tree.store._getAllNodes().length;i++){
this.$refs.tree.store._getAllNodes()[i].expanded=this.defaultExpand;
}
否定意见为:
这个方法拿到的数组的长度一一直为0!!!
方案二:
ref="tree", this.treeData 是他的属于model,this.treeData[i].id 的 id 是 他数组this.treeData本来需要带的一个属性。
所以有了下面的:
for (let i = 0; i < this.treeData.length; i++) {
this.$refs.tree.store.nodesMap[this.treeData[i].id].expanded = true;
}
否定意见为:
我的数据model的属性后端给的不是id,而且由于类型的不同给的属性字段名也不一样。例如:
{
{
card_id: 1001
type:"card",
name:"卡片"
childern: [
{
font_id: "j10293",
type:"font",
name: "世界"
},
{
font_id: "j10294",
type:"font",
name: "你好"
}
]}
}
正题来了!!!!我的解决方案:
shrinkTreeNode() {
//改变一个全局变量
this.treeStatus = !this.treeStatus;
//改变每个节点的状态
this.changeTreeNodeStatus(this.$refs.attrList.store.root);
},
//改变节点的状态
changeTreeNodeStatus(node) {
node.expanded = this.treeStatus;
for(let i = 0; i < node.childNodes.length; i++ ) {
//改变节点的自身expanded状态
node.childNodes[i].expanded = this.treeStatus;
//看看他孩子的长度,有的话就调用自己往下找
if(node.childNodes[i].childNodes.length > 0) {
this.changeTreeNodeStatus(node.childNodes[i]);
}
}
},
我注释已经说的很明白了,其实就是 我的思路是:
1.分析节点的数据结构,分析那里控制着展开
2.然后就做就好了