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)
    },

最后但很重要:有更简单的方法记得评论说呀,感觉这个打补丁的方式好蠢啊(/ω\)


charlotteeeeeee
74 声望7 粉丝