element-UI的树组件十分强大,但是我这边有一个需求,点击节点本身和左边小三角按钮时都需要记录菜单树的展开节点。
点击左边小三角不能触发node-click事件(如果有朋友知道怎么做,麻烦告知一下,下面的代码就不需要看了/捂脸)
为了使点击小三角也能追踪记录到节点的开合状态,所以启用了node-expand和node-collapse两个事件
这时我遇到一个让我想原地去世的BUG,就是节点的展开闭合状态node.expanded怎么都不对,具体体现为:node打印出来里面的expanded是正常的,但是如果打印node.expanded就不对!!!!我都要怀疑是浏览器BUG了。
这种状态滞留像极了复杂数据类型值修改后再js中能看见正确的值,而template中渲染还是错误的值一样
所以我尝试分开写node-collapse和node-expand,并用this.$set去设置node.expanded值,之后再去调用记录展开节点数组的方法就OK了!!✿✿ヽ(°▽°)ノ✿✿
template:
<el-tree
class="filter-tree"
:data="treedata"
node-key="id"
:default-expanded-keys="treeopenkey"
@node-expand="unfoldTreeState"
@node-collapse="foldTreeState"
@node-click="nodeClick"
auto-expand-parent="false"
:indent="10"
ref="menutree">
<div class="ds-custom-tree-node" slot-scope="{ node , data }">
<div class="tree-title">{{data.label}}</div>
</div>
</el-tree>
js:
/**
* 巨坑!!!!
* node的expanded值有滞留BUG,需要用$set深赋值之后才能正常获取node.expanded
* **/
unfoldTreeState(data,node,ele){
this.$set(node, "expanded", true);
this.keepTreeState(data,node)
},
foldTreeState(data,node,ele){
this.$set(node, "expanded", false);
this.keepTreeState(data,node)
},
最后但很重要:有更简单的方法记得评论说呀,感觉这个打补丁的方式好蠢啊(/ω\)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。