需求:点击表格的某一行,即可触发选中该行。
如同element table中组件提供了单选的支持,只需要配置highlight-current-row属性即可实现单选。如下图。但element仅提供了单选,那多选的情况如何实现呢?
在这里插入图片描述
多选点击效果如下:选中某一行后,相当于对应的checkbox被选中
在这里插入图片描述
实现如下:
界面:在表格上添加以下三个参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

<el-table 
   border
   ref="serveTable"
   :data="tableData"
   @selection-change="handleSelectionChange"
   @row-click="rowClick"  
   :row-style="rowStyle" 
   :row-class-name="rowClassName"
>
<el-table-column type="selection" width="60" align="center"></el-table-column>
<el-table-column type="index" width="50" label="序号" align="center"></el-table-column>
<el-table-column prop="name" label="设备名" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="ip" label="终端IP" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="status" label="状态" show-overflow-tooltip :formatter="formatter_status" align="center"></el-table-column>
<el-table-column prop="model" label="设备型号" show-overflow-tooltip align="center"></el-table-column>
<el-table-column label="操作" align="center" width="150">
  <template slot-scope="scope">
    <el-button
      size="mini"
      icon="el-icon-delete"
      type="danger" plain
      @click.native.stop="handleDelete(scope.$index, scope.row)"
     >删除</el-button>
   </template>
 </el-table-column>
</el-table>

事件触发

<script>
 methods: {
      //表格选中事件
      handleSelectionChange(val) {
            this.multipleSelection = val;
        },
      rowStyle({row,rowIndex}) {
            Object.defineProperty(row, 'rowIndex', { //给每一行添加不可枚举属性rowIndex来标识当前行
                value: rowIndex, 
                writable: true,
                enumerable: false
                })
            },
       //监听row-click事件,实现选中
       rowClick(row, column, event) {
             let refsElTable = this.$refs.serveTable; // 获取表格对象
             let findRow = this.multipleSelection.find(c => c.rowIndex == row.rowIndex);  //找到选中的行
             if (findRow ) {
                 refsElTable.toggleRowSelection(row, false);  //如过重复选中,则取消选中
                 return;
             }
             refsElTable.toggleRowSelection(row,true); // 实现选中行中选中事件
         },
        //实现选中高亮
       rowClassName({ row,  rowIndex }) {
             let rowName = "",
             findRow = this.multipleSelection.find(c => c.rowIndex === row.rowIndex);
             if (findRow) {
                 rowName = "current-row "; 
             }
             return rowName; //也可以再加上其他类名 如果有需求的话
         },
         }
         </script>

最后最后,发现如果点击按钮,也会触发选中事件,此时可以使用按钮的冒泡事件。如下:
在这里插入图片描述
参考文章:https://juejin.im/post/5d5030e4e51d4561e224a2fb 更多功能可查看该文章。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐