iview的table组件中复选框实现 选择一个其他复选框都禁用,取消选中,其他复选框取消禁用
时间: 2023-10-31 22:05:18 浏览: 226
可以使用`selection-change`事件来监听复选框的变化,然后根据当前选中的行数据来更新其他复选框的禁用状态。
具体实现可以参考以下代码:
```html
<template>
<div>
<i-table :columns="columns" :data="data" :row-key="rowKey" @selection-change="handleSelectionChange">
<template slot-scope="{ row }" slot="selection" :disabled="row.disabled">
<i-checkbox :disabled="row.disabled" v-model="row.checked"></i-checkbox>
</template>
</i-table>
</div>
</template>
<script>
export default {
data() {
return {
columns: [
{
type: "selection",
width: 60,
align: "center"
},
{
title: "姓名",
key: "name"
},
{
title: "年龄",
key: "age"
}
],
data: [
{
name: "张三",
age: 20,
checked: false,
disabled: false
},
{
name: "李四",
age: 25,
checked: false,
disabled: false
},
{
name: "王五",
age: 30,
checked: false,
disabled: false
}
]
};
},
methods: {
handleSelectionChange(selection) {
const checkedRow = selection[selection.length - 1];
this.data.forEach(row => {
if (row === checkedRow) {
row.disabled = false;
} else {
row.checked = false;
row.disabled = true;
}
});
},
rowKey(row) {
return row.name;
}
}
};
</script>
```
在上面的代码中,我们在`<i-table>`组件中使用了`<template slot="selection">`来自定义复选框的渲染,然后在`selection-change`事件中更新其他复选框的禁用状态。具体来说,当选中一个复选框时,我们将其他复选框的`checked`属性设置为`false`,将`disabled`属性设置为`true`,这样就达到了选择一个其他复选框都禁用的效果。当取消选中该复选框时,我们将其他复选框的`disabled`属性设置为`false`,这样就取消了禁用状态。
阅读全文