# 方法一:修改 selection 逻辑
需求场景:选择表格数据时,需要控制单条数据的操作按钮是否禁用。
# html 代码:
|  | <div class="table-wrap"> | 
|  |     <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"></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"> | 
|  |        | 
|  |         > 切换第二、第三行的选中状态 & lt;/el-button | 
|  |       > --> | 
|  |       <el-button @click="toggleSelection()">取消选择</el-button> | 
|  |     </div> | 
|  |   </div> | 
# js 代码:
|  | 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: [],  | 
|  |       checkedSelection: {},  | 
|  |     }; | 
|  |   }, | 
|  |   mounted() { | 
|  |     document.onclick = () => { | 
|  |       console.log('单选--checkedSelection', this.checkedSelection); | 
|  |     } | 
|  |   }, | 
|  |   methods: { | 
|  |     toggleSelection(rows) { | 
|  |       if (rows) { | 
|  |         rows.forEach((row) => { | 
|  |           this.$refs.multipleTable.toggleRowSelection(row); | 
|  |         }); | 
|  |       } else { | 
|  |         this.$refs.multipleTable.clearSelection(); | 
|  |       } | 
|  |     }, | 
|  |      | 
|  |     handleSelectionChange(val) { | 
|  |       console.log('val--==', val); | 
|  |        | 
|  |        | 
|  |   | 
|  |        | 
|  |       if(val.length == 1){ | 
|  |         let item = val[val.length -1]; | 
|  |         this.checkedSelection = JSON.parse(JSON.stringify(item)); | 
|  |       } | 
|  |   | 
|  |        | 
|  |       if(val.length > 1){ | 
|  |         this.$refs.multipleTable.clearSelection();  | 
|  |         this.$refs.multipleTable.toggleRowSelection(val.pop());  | 
|  |       } | 
|  |   | 
|  |        | 
|  |       if(val.length == 0){ | 
|  |         this.checkedSelection = {}; | 
|  |       } | 
|  |     }, | 
|  |   }, | 
|  | }; | 
# css 代码:
|  | <style lang="less" scoped> | 
|  |  | 
|  | /deep/.el-table__header{ | 
|  |     .el-checkbox{ | 
|  |     display: none; | 
|  |     } | 
|  | } | 
|  | </style> | 
# 方法二:增加 checkbox 列
# html 代码:
|  | <el-table-column type="selection" width="55"> | 
|  |     <template slot-scope="scope"> | 
|  |         <el-checkbox | 
|  |             v-model="scope.row.selected" | 
|  |             :disabled="isDisabled(scope.row)" | 
|  |             @change="handleSelectionChange(scope.row)" | 
|  |         /> | 
|  |     </template> | 
|  | </el-table-column> | 
# js 代码:
|  | data() { | 
|  |     return { | 
|  |         selectedRow: null | 
|  |     } | 
|  | }, | 
|  | methods: { | 
|  |     isDisabled(row) { | 
|  |         return this.selectedRow && !row.selected | 
|  |     }, | 
|  |     handleSelectionChange(rows) { | 
|  |         this.selectedRow = rows.selected ? rows : null | 
|  |     }, | 
|  | } | 
# 方法三:增加 radio 列
# html 代码:
|  | <template> | 
|  |   <el-table | 
|  |     :data="tableData" | 
|  |     highlight-current-row | 
|  |     @current-change="handleCurrentChange" | 
|  |     style="width: 100%"> | 
|  |     <el-table-column | 
|  |       type="radio" | 
|  |       width="55"> | 
|  |     </el-table-column> | 
|  |     <el-table-column | 
|  |       prop="date" | 
|  |       label="日期" | 
|  |       width="180"> | 
|  |     </el-table-column> | 
|  |     <el-table-column | 
|  |       prop="name" | 
|  |       label="姓名" | 
|  |       width="180"> | 
|  |     </el-table-column> | 
|  |     <el-table-column | 
|  |       prop="address" | 
|  |       label="地址"> | 
|  |     </el-table-column> | 
|  |   </el-table> | 
|  | </template> | 
# js 代码:
|  | export default { | 
|  |   data() { | 
|  |     return { | 
|  |       tableData: [{ | 
|  |         date: '2016-05-02', | 
|  |         name: '王小虎', | 
|  |         address: '上海市普陀区金沙江路 1518 弄' | 
|  |       }, { | 
|  |         date: '2016-05-04', | 
|  |         name: '李小虎', | 
|  |         address: '上海市普陀区金沙江路 1517 弄' | 
|  |       }, { | 
|  |         date: '2016-05-01', | 
|  |         name: '赵小虎', | 
|  |         address: '上海市普陀区金沙江路 1519 弄' | 
|  |       }], | 
|  |       currentRow: null | 
|  |     }; | 
|  |   }, | 
|  |   methods: { | 
|  |     handleCurrentChange(val) { | 
|  |       this.currentRow = val; | 
|  |     } | 
|  |   } | 
|  | }; |