table的多选行点击和取消事件,复选框选中和取消事件,利用this.$refs.table.selection以及状态变化事件和行点击事件触发,代码简洁,简单

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <!-- import CSS -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
</head>

<body>
    <!-- 处理table的复选框选中和取消选中,包含多个表格的情况
         1.首先要确认时选中还是取消选中,这个可以通过判断当前行是否在选中的数组中来判断    
    -->
    <!-- 处理table至少选择一个,当table剩下最后一个的时候,不允许取消 -->
    <div id="app">
        <el-table ref="multipleTable1" :data="tableData" tooltip-effect="dark" style="width: 100%"
            @selection-change="handleSelectionChange"  @row-click="(a,b,c)=>{rowClick(a,b,c,1)}">
            <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>切换第二、第三行的选中状态</el-button>
            <el-button>取消选择</el-button>
        </div>
        <el-table ref="multipleTable2" :data="tableData" tooltip-effect="dark" style="width: 100%"
            @selection-change="handleSelectionChange" @row-click="(a,b,c)=>{rowClick(a,b,c,2)}">
            <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>
        <el-table ref="multipleTable3" :data="tableData" tooltip-effect="dark" style="width: 100%"
            @selection-change="handleSelectionChange"  @row-click="(a,b,c)=>{rowClick(a,b,c,3)}">
            <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>
        <el-table ref="multipleTable4" :data="tableData" tooltip-effect="dark" style="width: 100%"
            @selection-change="handleSelectionChange" @select="handleSelect" @row-click="(a,b,c)=>{rowClick(a,b,c,4)}">
            <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>
</body>
<!-- import Vue before Element -->
<script src="https://unpkg.com/vue@2/dist/vue.js"></script>
<!-- import JavaScript -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
    new Vue({
        el: '#app',
        data: function () {
            return {
                selectionAll:[],
                lastTableName: '',
                selection: [],
                visible: false,
                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 弄'
                }],
            }
        },
        methods: {
            rowClick(row, column, event,index) {
                // this.$refs[this.lastTableName].toggleRowSelection(row, true)
                console.log('4.  ', row, column, event,index,123)
                this.$refs['multipleTable'+index].toggleRowSelection(row)
            },
            // 状态发生变化时触发
            handleSelectionChange(val) {
                console.log(this.$refs, 'multipleTable');
                console.log('1.', val);
                this.selectionAll = []
                for (let key in this.$refs) {
                    if (this.$refs[key].selection.length > 0) {
                        // console.log('5     ',key)
                        this.lastTableName = key
                        this.$refs[key].selection.forEach(item => {
                            this.selectionAll.push(item.name)
                            console.log('222.  ', this.selectionAll)
                        })
                    }

                }
            },
          

        },
    })
</script>

</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过给 `el-table` 组件设置 `@row-click` 事件来实现单击行时选中复选框。 具体实现步骤如下: 1. 给 `el-table` 组件设置 `@row-click` 事件,绑定一个方法。 ``` <el-table @row-click="handleRowClick"> ... </el-table> ``` 2. 在 `handleRowClick` 方法中,获取当前点击的行数据和选中状态,然后通过 `this.$refs.table.toggleRowSelection(rowData)` 方法来切换选中状态。 ``` methods: { handleRowClick(rowData) { // 获取当前行的选中状态 const isSelected = this.$refs.table.isRowSelected(rowData); // 切换选中状态 this.$refs.table.toggleRowSelection(rowData, !isSelected); } } ``` 3. 在 `el-table-column` 组件的 `type` 属性中设置为 `selection`,开启复选框。 ``` <el-table-column type="selection"></el-table-column> ``` 完整代码示例: ``` <template> <el-table :data="tableData" @row-click="handleRowClick" ref="table"> <el-table-column type="selection"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="gender" label="性别"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, gender: '男' }, { name: '李四', age: 20, gender: '女' }, { name: '王五', age: 22, gender: '男' } ] }; }, methods: { handleRowClick(rowData) { // 获取当前行的选中状态 const isSelected = this.$refs.table.isRowSelected(rowData); // 切换选中状态 this.$refs.table.toggleRowSelection(rowData, !isSelected); } } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值