el-tree实现全选/反选、默认全选

这篇博客介绍了如何在Vue.js应用中利用Element UI组件库的el-tree元素,实现字段选择的全选和反选功能。通过监听弹框的可见性来触发全选操作,并在checkAllChange方法中处理全选和反选的逻辑,确保数据同步。文章还展示了相关的watch和methods代码片段。

 

<el-form-item label="字段选择" :label-width="formLabelWidth">
        <div class="propLists">
          <div class="propListHeader">
            <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="checkAllChange">全部选择</el-checkbox>
          </div>
          <div class="propListBody">
            <el-tree ref="channelTree" :data="props" :props="defaultProps" node-key="id" show-checkbox @check-change="handleCheckChange"></el-tree>
          </div>

        </div>
      </el-form-item>

 

 

watch:{
  visibleExcel(newVal) {  //在弹框打开时默认执行全选方法,
      if (newVal) {
        this.checkAllChange()
      }
    },
} 

methods: {   
// 全选或反选
    checkAllChange() {
      if (this.checkAll) { // 全选
        this.$nextTick(() => {    //这个如果要默认全选就必须加,否则会报错“setCheckedNodes”未定义
          this.$refs.channelTree.setCheckedNodes(this.props)
        })
        // this.
      } else { // 取消选中
        this.$nextTick(() => {
          this.$refs.channelTree.setCheckedKeys([])
        })
      }
    },
}

 

### 使用 `el-tree` 组件实现全选功能 在 Vue.js 中使用 Element UI 的 `el-tree` 组件可以方便地管理树形结构的数据。为了实现全选的功能,可以通过监听事件并操作数据来完成。 #### HTML 结构 定义一个按钮用于触发全选/的操作以及展示 `el-tree` 组件: ```html <template> <div> <button @click="selectAll">全选</button> <button @click="unSelectAll"></button> <el-tree :data="treeData" show-checkbox ref="tree"></el-tree> </div> </template> ``` #### JavaScript 部分 通过方法来处理全选逻辑: ```javascript <script> export default { data() { return { treeData: [ { label: '一级 1', children: [{ label: '二级 1-1', children: [{ label: '三级 1-1-1' }] }] }, { label: '一级 2', children: [{ label: '二级 2-1', children: [{ label: '三级 2-1-1' }] }, { label: '二级 2-2', children: [{ label: '三级 2-2-1' }] }] } ] }; }, methods: { selectAll() { this.$refs.tree.setCheckedNodes(this.getAllLeafNodes()); }, unSelectAll() { const allLeafNodes = this.getAllLeafNodes(); const selectedNodes = this.$refs.tree.getCheckedNodes(false, true); let nodesToUncheck = []; for (let node of allLeafNodes) { if (selectedNodes.includes(node)) { continue; } else { nodesToUncheck.push(node); } } this.$refs.tree.setCheckedNodes(nodesToUncheck); }, getAllLeafNodes() { function getLeaves(data) { let result = []; function traverse(item) { if (!item.children || !item.children.length) { result.push(item); } else { item.children.forEach(traverse); } } data.forEach(traverse); return result; } return getLeaves(this.treeData); } } }; </script> ``` 此代码片段展示了如何利用 `setCheckedNodes()` 自定义函数 `getAllLeafNodes()` 来获取所有的叶子节点,并基于这些信息执行全选操作[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值