element-ui 多级树形控件的实现

本文展示了如何在Vue.js应用中创建联动按钮,用于控制树形控件的展开折叠、全选/全不选以及父子联动功能。通过绑定事件和设置属性如`check-strictly`,可以实现对树形控件的交互。此外,文章还提到了提交按钮的逻辑处理,以及在角色编辑时保持已选节点状态的方法。
摘要由CSDN通过智能技术生成

1、树形控件的上方我做了一个联动的按钮,控制树形控件整体的展开折叠、父子联动、全选或全不选

​
 <el-checkbox
    label="展开/折叠"
    v-model="roleChange"
    @change="handleChange"
  ></el-checkbox>
  <el-checkbox
     label="全选/全不选"
     v-model="roleCheck"
     @change="handleChecked"
    ></el-checkbox>
    <el-checkbox
      label="父子联动"
      v-model="roleBind"
       @change="changeFather"
     ></el-checkbox>

​

 对应的事件代码

// 新增角色对话框中的全选和全不选操作
    handleChecked() {
      // this.roleCheck = !this.roleCheck;
      // console.log(this.roleCheck);
      if (this.roleCheck) {
        this.$refs.tree.setCheckedKeys([1]);
      } else {
        this.$refs.tree.setCheckedKeys([0]);
      }
    },
    // 实现折叠和展开的操作
    handleChange() {
      // this.roleChange = !this.roleChange;
      // console.log(this.roleChange);
      if (this.roleChange) {
        this.$refs.tree.store.nodesMap[1].expanded = true;
      } else {
        this.$refs.tree.store.nodesMap[1].expanded = false;
      }
    },
    // 父子联动
    changeFather(e) {
      if (e) {
        this.menuCheckStrictly = true;
      } else {
        this.menuCheckStrictly = false;
      }
    },

2、树形控件

 <div class="treeBox">
                <el-tree
                  ref="tree"
                  :data="data"
                  show-checkbox
                  node-key="id"
                  :props="defaultProps"
                  :check-strictly="!menuCheckStrictly"
                  @check-change="handleCheckChange2"
                  :default-expanded-keys="treeData"
                  :default-checked-keys="orderKeys"
                  :visible.sync="treeVisible"
                >
                </el-tree>
              </div>

ref相当于id是很重要的一点 node-key="id"是每一个选项的特定id这个要写才能有后面的那些操作

check-strictly:表示在显示复选框的情况下,是否严格的遵循父子不互相关联的做法,默认为 false。这里一开始取反就是不关联 ,刚好上面做的就是有父子关联的按钮可以根据这个按钮改变到底关不关联

:default-expanded-keys="treeData" | 默认展开的节点

:default-checked-keys="orderKeys" | 选中的节点

相关事件函数代码:

下面这个就是核心代码了,你选中的那些节点保存下来

// 把选择的菜单权限赋值给this.glry,然后进行传参
    handleCheckChange2(data, checked, indeterminate) {
      //这一步狠狠狠重要,把选中的数组赋值
      let nodess = JSON.stringify(this.$refs.tree.getCheckedNodes());
      // console.log('nodess', nodess, typeof nodess);
      this.glry = [];
      for (const iterator of JSON.parse(nodess)) {
        this.glry.push(iterator.id);
      }
    }

3、提交按钮需要做什么

这个控件操作完毕要按确定,那么一些逻辑就应该写在这里,根据接口要求传参获取数据,然后做一些改变啥的,这里就不具体说因为项目不同差别也大

 // 当表单提交之后,把之前选中的选项清空,把树形控件折叠起来,就是调用上面按钮的功能
      this.$refs.tree.setCheckedKeys([0]);
      this.$refs.tree.store.nodesMap[1].expanded = false;

4、还有一个要求就是当你点击修改的时候,你上次操作在这个角色身上的选择的节点在点开的时候也要是和上次有着相同的选择

这里的this.orderKeys就是你点击的时候传递角色的id然后获取它的详情数据,把它有的选择节点进行保存

// 树形结构控件按返回的数值进行选项的默认勾选;
        this.$refs.tree.setCheckedKeys(this.orderKeys);

大致是这样的具体也可以进行其他文章的百度进行参考结合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值