vue按住shift键多选(以element框架的table为例)

vue按住shift键多选(以element框架的table为例)

在这里插入图片描述
1、首先,我们要在element组件中写一个事件@select = “pinSelect”,pinSelect是自定义命名
在这里插入图片描述
2、在data中添加两个变量,自定义命名origin: -1是起点数,pin:false是默认不按住
在这里插入图片描述
3、在 mounted()写键盘事件,keydown按住和keyup松开事件
在这里插入图片描述
4、在created()遍历数据数组,并且赋值索引
在这里插入图片描述
5、然后在methods:中写
在这里插入图片描述
完整的代码

<template>
<!-- 按住shift键选择 -->
  <div>
    <!-- 这里添加element组件table的select触发事件,用来实现按住shift多选的 -->
    <el-table
      :data="tableData"
      tooltip-effect="dark"
      style="width: 100%"
      @selection-change="handleSelectionChange"
      @select = "pinSelect"
      ref="multipleTable"  
      >
      
      <el-table-column
        type="selection"
        width="55">
      </el-table-column>
      <el-table-column
        label="日期"
        width="120">
        <template slot-scope="scope">{{ scope.row.date }}</template>
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名"
        width="120">
      </el-table-column>
      <el-table-column
        prop="address"
        label="地址"
        show-overflow-tooltip>
      </el-table-column>
      </el-table>
      <div style="margin-top: 20px">
        <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
        <el-button @click="toggleSelection()">取消选择</el-button>
    </div>
  </div>
</template>

<script>
export default {
  name:'ElementTable',
   data() {
      return {
        origin: -1, // 这里给一个变量作为起点
        pin: false, // 这里给一个变量,默认为false,不按住
        tableData: [{
          date: '2016-05-01',
          name: '王幼虎',
          address: '上海市普陀区金沙江路 1511 弄'
        }, {
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1512 弄'
        }, {
          date: '2016-05-03',
          name: '王中虎',
          address: '上海市普陀区金沙江路 1513 弄'
        }, {
          date: '2016-05-04',
          name: '王老虎',
          address: '上海市普陀区金沙江路 1514 弄'
        }, {
          date: '2016-05-05',
          name: '王死虎',
          address: '上海市普陀区金沙江路 1515 弄'
        }, {
          date: '2016-05-06',
          name: '王骨虎',
          address: '上海市普陀区金沙江路 1516 弄'
        }, {
          date: '2016-05-07',
          name: '王灰虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }],
        multipleSelection: []
      }
    },
    methods: {
      toggleSelection(rows) {
        if (rows) {
          rows.forEach(row => {
            this.$refs.multipleTable.toggleRowSelection(row);
          });
        } else {
          this.$refs.multipleTable.clearSelection();
        }
      },
      handleSelectionChange(val) {
        this.multipleSelection = val;
      },
      // 这里是select事件开始
      pinSelect (item, index) {
        const data = this.$refs.multipleTable.tableData; // 获取所以数据
        const origin = this.origin; // 起点数 从-1开始
        const endIdx = index.index; // 终点数   
        if (this.pin && item.includes(data[origin])) { // 判断按住
          const sum = Math.abs(origin - endIdx) + 1;// 这里记录终点
          const min = Math.min(origin, endIdx);// 这里记录起点
          let i = 0;
          while (i < sum) {
            const index = min + i;
              this.$refs.multipleTable.toggleRowSelection(data[index], true); // 通过ref打点调用toggleRowSelection方法,第二个必须为true
            i++;
          }
        } else {
          this.origin = index.index; // 没按住记录起点
        }
      }
      // 这里是select事件结束
    },
    // 这里是获取键盘事件
    mounted(){
      window.addEventListener('keydown', code => { // 这个是获取键盘按住事件
      // console.log(code); // 这个是你按住键盘打印出键盘信息,在浏览器中自行查看
      if (code.keyCode === 16 && code.shiftKey) { // 判断是否按住shift键,是就把pin赋值为true
          this.pin = true;
        }
      });
      window.addEventListener('keyup', code => { // 这个是获取键盘松开事件
        if(code.keyCode === 16){ // 判断是否松开shift键,是就把pin赋值为false
          this.pin = false;
        }
      });
    },
    created(){
      this.tableData.forEach((item, index) => {// 遍历索引,赋值给data数据
        item.index = index;
      })
    }
  }
</script>
<style scoped>

</style>
要取消 element-plus 多选表格中的选定行,请使用以下方法之一: 1. 点击选定行中的复选框来取消选中。 2. 点击表格中的任意行并按住 Shift ,从选定的行中取消选中行。 3. 在代码中使用内置的方法来取消选定行。例如,你可以使用 `toggleRowSelection` 方法来切换行的选中状态,或者使用 `clearSelection` 方法来清除所有选中的行。以下是示例代码: ```vue <template> <el-table :data="tableData" :row-key="row => row.id" :selectable="row => row.status === 'active'" // 只有状态为 active 的行才能选中 v-model="selectedRows" style="width: 100%"> <el-table-column type="selection" width="55"> </el-table-column> <el-table-column prop="name" label="Name"> </el-table-column> <el-table-column prop="status" label="Status"> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { id: 1, name: 'John Doe', status: 'active' }, { id: 2, name: 'Jane Doe', status: 'inactive' }, { id: 3, name: 'Bob Smith', status: 'active' }, { id: 4, name: 'Alice Johnson', status: 'inactive' } ], selectedRows: [] } }, methods: { deselectRow(row) { this.$refs.table.toggleRowSelection(row, false) // 取消选中行 }, clearSelection() { this.$refs.table.clearSelection() // 清除所有选中的行 } } } </script> ``` 在上面的代码中,我们使用 `toggleRowSelection` 方法来取消选中行,该方法接受两个参数:要取消选中的行和一个布尔值(默认为 `true`),表示是否选中。我们还定义了一个 `deselectRow` 方法,该方法在点击行时调用,从选定的行中取消选中行。 我们还使用 `clearSelection` 方法来清除所有选中的行。该方法不接受参数,只需调用即可。注意,我们需要使用 `v-model` 指令将选定行的数组绑定到 `selectedRows` 数据属性上,这样我们才能在代码中访问它。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

loser60

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

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

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

打赏作者

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

抵扣说明:

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

余额充值