解决vxe-table的父子节点不关联(checkStrictly)后没有全选框的问题。

问题:

使用vxe-table的树形表格时,发现勾选父节点也会连带上子节点,使用父子节点不关联后全选框又没了。

解决方法:

发现官方文档在使用checkStrictly后用两个按钮替代:

官方案例.png

既然可以用按钮替代,也就可以使用自定义的复选框调用这两个按钮的方法来模拟原来的复选框。

自定义复选框(CheckBox):

        <vxe-column type="checkbox" width="50">
          <template v-if="isTreeTable/**树形表格开启父子不关联后,需自定义复选框 */" #header>
            <vxe-checkbox
              v-model="treeCheckBox"
              :indeterminate="treeCheckBox == null"
              @change="treeCheckBoxChange"
             ></vxe-checkbox>
          </template>
        </vxe-column>
   treeCheckBoxChange({ checked }) {
      if (checked) {
        this.$refs.table.setCheckboxRow(this.tableData, true)
      } else {
        this.$refs.table.clearCheckboxRow()
      }
    }

indeterminate为是否不确定,就是全选和全不选的中间状态,
treeCheckBox

  • treeCheckBoxfalse时,CheckBox为全不选状态
    全不选.png
  • treeCheckBoxtrue时,CheckBox为全选状态
    全选.png
  • treeCheckBoxnull时,CheckBox为不确定状态
    不确定.png

通过判断checked是true还是false触发相应的全选和清除事件,就可以完成原有复选框的全选和清除。但选中某一行数据后,全选按钮需要做出相应的状态改变。

通过vxe的checkbox-change事件模拟状态改变

接收checkbox-change事件

      <vxe-table
        :checkbox-config="{checkStrictly: true, showHeader: true }/** 控制子级不可选中、不可操作*/"
        :data="tableData"
        @checkbox-change="handleSelectionChange"
      >

已无法接收checkbox-all事件

    handleSelectionChange({ records }) {
        // 树形表格的自定义选中,判断是否全部选中
        // 三种状态的判断
        if (records.length >= this.tableData.length) {
          this.treeCheckBox = true
        } else if (records.length > 0) {
          this.treeCheckBox = null
        } else {
          this.treeCheckBox = false
        }
    }

这样就与原来的全选按钮没有区别了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容