利用elementui中的Table组件,实现带单选框效果的table组件

使用elementUI中的Table实现带单选框的效果

elementui中的table组件实现单选的逻辑是通过对被选中的行进行高亮显示来实现的,无法实现带选择框的单选表格。经过一番研究,我采取以下代码实现了带单选框的table表格,思路是:通过handleSelectionChange函数监听多选框的变化,每次如果多选框有大于一条数据被选中,则处理多选框数据,使之只保留最新被选中的数据,并且重新清空多选框,赋值最新的数据相关行被选中,最终效果如下:
带单选框的Table组件实现
此时的table控件上的多选框只能进行单选了,并在控制台打印了当前选中行的日期信息。
实现代码如下:

<template>
  <el-table
    ref="multipleTable"
    :data="tableData"
    tooltip-effect="dark"
    style="width: 100%"
    @selection-change="handleSelectionChange">
    <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>
</template>

<script>
  export default {
    data() {
      return {
        tableData: [{
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-08',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-06',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-07',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }],
        multipleSelection: []
      }
    },

    methods: {
      toggleSelection(rows) {
        if (rows) {
          rows.forEach(row => {
            this.$refs.multipleTable.toggleRowSelection(row);
          });
        } else {
          this.$refs.multipleTable.clearSelection();
        }
      },
      handleSelectionChange(val) {
        //处理清空后的回调
        if(val.length <= 0){
            return ;
        }else if(val.length == 1){
            console.log('当前选中的数据:');
            console.log(val[0].date);
            return;
        }else{
            // console.log('处理之前');
            // console.log(val);
            let obj = val[val.length-1];//取最后被选中的行
            val = [];
            val[0] = obj;
            this.multipleSelection = val;
            // console.log('处理之后');
            // console.log(val);
            //先清空
            this.$refs.multipleTable.clearSelection();
            //再赋值
            this.$refs.multipleTable.toggleRowSelection(val[0]);
        }
      },
    }
  }
</script>
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值