vxe复选框勾选事件 checkbox-change的使用

vxe复选框勾选事件 checkbox-change的使用

​ vxe是一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、贼灵活的配置项等…

1. vxe-table和vxe-grid

​ 在vxe-table中,列名使用标签定义,而在vxe-grid中,列名是通过:columns=“”,从data中返回而来。例如:

1.1 vxe-table的基本使用
  <vxe-table
      border
      ref="table"
      style="width: 500px"
      :data="tableData"
      @checkbox-change="checkboxChange"
      @checkbox-all="selectAllCheckboxChange"
  >
    <vxe-column v-if="openCheckBox" type="checkbox" width="60"></vxe-column>
    <vxe-column field="name" title="Name"></vxe-column>
    <vxe-column field="sex" title="Sex"></vxe-column>
    <vxe-column field="age" title="Age"></vxe-column>
    <vxe-column field="address" title="Address" show-overflow></vxe-column>
  </vxe-table>
1.2 vxe-grid的基本使用
  <vxe-grid
      border
      ref="table"
      style="width: 500px"
      :data="tableData"
      :columns="tableColumn"
      @checkbox-change="checkboxChange"
      @checkbox-all="selectAllCheckboxChange"
  >
  </vxe-grid>
  data() {
    return {
      tableColumn: [
        { type: 'checkbox', width: 50 , visible: false },
        { field: 'name', title: 'Name', width: 150, align: 'center' },
        { field: 'sex', title: 'Sex', align: 'center'},
        { field: 'age', title: 'Age', align: 'center' },
        { field: 'address', title: 'Address', align: 'center' },
      ],
    }
  },
2. 复选框可隐藏显示的用法

​ 在vex-table中,可以在绑定一个boolean型的变量用于控制复选框是否显示,但是只能用v-if进行绑定,而不能使用v-show。
​ 在vxe-grid中,可以使用visible字段用于控制复选框是否显示,要改变其值可以使用this.$set方法,例如:

// 显示选框
this.$set(this.tableColumn, 0 , {type: 'checkbox', width: 50 ,visible: true})
// 隐藏选框
this.$set(this.tableColumn, 0 , {type: 'checkbox', width: 50 ,visible: false})
​ 此外,在打开复选框之前应该要使用clearCheckboxRow()方法清除之前已选的复选框,否则,打开复选框后会带出上一次关闭复选框时的结果
3 .进行勾选事件

​ 无论是vxe-table还是vxe-grid,都可以通过checkbox-change(勾选部分)和checkbox-all(全选)触发勾选事件,且只对 type=checkbox 有效,,使用时要加上$refs属性。

3.1 checkbox-change事件的基本使用
    checkboxChange() {
      const checkedRows = this.$refs.table.getCheckboxRecords()
    },
3.1 checkbox-all事件的基本使用
    selectAllCheckboxChange(checked) {
      const checkedRows = checked.records
    },

​ 此方法可以实现全选和全不选的情况,且只有点击列名出的复选框才会触发

3.3 测试用例
4. 完整代码
4.1 vxe-table
<template>

  <button @click="openCheck">打开复选框</button>
  <button @click="closeCheck">关闭复选框</button>
  <vxe-table
      border
      ref="table"
      style="width: 500px"
      :data="tableData"
      @checkbox-change="checkboxChange"
      @checkbox-all="selectAllCheckboxChange"
  >
    <vxe-column v-if="openCheckBox" type="checkbox" width="60"></vxe-column>
    <vxe-column field="name" title="Name"></vxe-column>
    <vxe-column field="sex" title="Sex"></vxe-column>
    <vxe-column field="age" title="Age"></vxe-column>
    <vxe-column field="address" title="Address" show-overflow></vxe-column>
  </vxe-table>
  </template>

<script>
export default {

  name: "VxeCheck",
  data() {
    return {
      tableData: [
        { id: 10001, name: 'Test1', role: 'Develop',
        sex: 'Man', age: 28, address: 'test abc' },
        { id: 10002, name: 'Test2', role: 'Test',
        sex: 'Women', age: 22, address: 'Guangzhou' },
        { id: 10003, name: 'Test3', role: 'PM',
        sex: 'Man', age: 32, address: 'Shanghai' },
        { id: 10004, name: 'Test4', role: 'Designer',
        sex: 'Women', age: 23, address: 'test abc' },
        { id: 10005, name: 'Test5', role: 'Develop',
        sex: 'Women', age: 30, address: 'Shanghai' }
      ],
      openCheckBox: false,
      checkedRows: []
    }
  },
  methods: {
    openCheck() {
      this.$refs.table.clearCheckboxRow()//清除之前已选的复选框
      this.openCheckBox = true
    },
    closeCheck() {
      this.openCheckBox = false
    },
    checkboxChange() {
      this.checkedRows = this.$refs.table.getCheckboxRecords()
      console.log(this.checkedRows)
    },
    selectAllCheckboxChange(checked) {
      this.checkedRows = checked.records
      console.log(this.checkedRows)
    },
  }
}
</script>

<style scoped>

</style>
4.2 vxe-grid
<template>
  <button @click="openCheck">打开复选框</button>
  <button @click="closeCheck">关闭复选框</button>
  <vxe-grid
      border
      ref="table"
      style="width: 500px"
      :data="tableData"
      :columns="tableColumn"
      @checkbox-change="checkboxChange"
      @checkbox-all="selectAllCheckboxChange"
  >
  </vxe-grid>
</template>

<script>
export default {

  name: "VxeCheck",
  data() {
    return {
      tableData: [
        { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
        { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
        { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
        { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 23, address: 'test abc' },
        { id: 10005, name: 'Test5', role: 'Develop', sex: 'Women', age: 30, address: 'Shanghai' }
      ],
      tableColumn: [
        { type: 'checkbox', width: 50 , visible: false },
        { field: 'name', title: 'Name', width: 150, align: 'center' },
        { field: 'sex', title: 'Sex', align: 'center'},
        { field: 'age', title: 'Age', align: 'center' },
        { field: 'address', title: 'Address', align: 'center' },
      ],
      openCheckBox: false,
      checkedRows: []
    }
  },
  methods: {
    openCheck() {
      this.$refs.table.clearCheckboxRow()//清除之前已选的复选框
      this.$set(this.tableColumn, 0 , {type: 'checkbox', width: 50 ,visible: true})
    },
    closeCheck() {
      this.$set(this.tableColumn, 0 , {type: 'checkbox', width: 50 ,visible: false})
    },
    checkboxChange() {
      this.checkedRows = this.$refs.table.getCheckboxRecords()
      console.log(this.checkedRows)
    },
    selectAllCheckboxChange(checked) {
      this.checkedRows = checked.records
      console.log(this.checkedRows)
    },
  }
}
</script>

<style scoped>

</style>
### vxe-table 中实现复选框单选模式 为了在 `vxe-table` 组件中将默认的复选框行为改为单选模式,可以通过监听选择事件并控制已选项的数量来达到目的。具体来说,在每次点击复选框时取消之前的选择。 #### 实现方式: 通过自定义 `checkbox-config` 属性中的 `checkMethod` 函数以及利用 `@cell-click` 或者其他相关事件处理逻辑可以完成此功能[^1]。 下面是一个简单的例子展示了如何仅允许一次选择: ```html <template> <div> <!-- 表格 --> <vxe-table border ref="xTable" :data.sync="tableData" @checkbox-change="handleCheckboxChange"> <vxe-column type="checkbox" width="60"></vxe-column> <vxe-column field="name" title="Name"></vxe-column> <vxe-column field="age" title="Age"></vxe-column> </vxe-table> <!-- 显示当前选中项的信息 (可选)--> <p>Selected Row: {{ selectedRow }}</p> </div> </template> <script> export default { data() { return { tableData: [ { name: 'John', age: 28 }, { name: 'Jane', age: 25 } ], selectedRow: null, // 存储被选中的那一行数据 }; }, methods: { handleCheckboxChange({ records }) { if (records.length > 0) { this.selectedRow = records[0]; // 清除之前的勾选状态 const $table = this.$refs.xTable; setTimeout(() => { $table.clearCheckboxRow(); // 手动设置最新的一次选择 $table.setCheckboxRow(this.selectedRow, true); }, 0); } else { this.selectedRow = null; } } } }; </script> ``` 在这个示例里,当用户尝试选择某一行时会触发 `handleCheckboxChange` 方法。如果已经有其他的行处于选定状态,则先清除所有的选择再单独设定新的选择。这样就实现了所谓的“单选”。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

€云起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值