vue el-table 内嵌套 select 遇到问题?
如下代码我在el-table里面嵌套了一个select:
<template v-slot:is_finished="{ row }"> <el-select v-model="row.is_finished" placeholder="请选择" @change="handleGetFinished" :disabled="row.is_finished == 2">
<el-option
v-for="item in finishOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</template>
我们的要求是选择了“是”后,点击保存,刷新表格数据后选择了“是”的,要禁用select,和提交按钮。
我是怎么做的呢,首次进入页面根据后端接口返回的数据控制禁用:disabled="row.is_finished == 2";
提交数据的时候需要获取选项的这个值,于是select使用change事件,但是,我选择后就直接改掉了行row.is_finished的值,直接禁用了,而且提交按钮也给禁用了,如下图:
怎么样才能不影响select选择和按钮提交?
回答:
想实现仅根据保存后的数据来控制select和按钮的状态,可以加工一下后端返回的数据
:每行数据新增一个属性rowDisable,默认为false;如果row.is_finished 等于 2 ,设置rowDisable为true。在渲染table中的 select 和 保存按钮 时,根据行rowDisable来决定是否禁用。这样,即使select值发生变化,也不会导致rowDisable值发生变化。
回答:
<template> <el-table :data="tableData">
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column label="完成状态">
<template v-slot="{ row }">
<el-select
v-model="row.is_finished"
placeholder="请选择"
@change="handleSelectChange(row)"
:disabled="row.disableSelect">
<el-option
v-for="item in finishOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</template>
</el-table-column>
</el-table>
<el-button
:disabled="isSubmitDisabled"
@click="handleSubmit">
提交
</el-button>
</template>
<script>
export default {
data() {
return {
tableData: [
{ name: '张三', is_finished: 0, disableSelect: false },
{ name: '李四', is_finished: 2, disableSelect: true }
],
finishOptions: [
{ label: '否', value: 0 },
{ label: '是', value: 1 },
{ label: '已处理', value: 2 }
],
isSubmitDisabled: false
};
},
methods: {
handleSelectChange(row) {
if (row.is_finished === 2) {
row.disableSelect = true;
this.isSubmitDisabled = true;
}
},
handleSubmit() {
console.log('提交数据');
this.refreshTableData();
},
refreshTableData() {
this.tableData.forEach(row => {
if (row.is_finished === 2) {
row.disableSelect = true;
}
});
}
}
};
</script>
以上是 vue el-table 内嵌套 select 遇到问题? 的全部内容, 来源链接: utcz.com/p/935193.html