在el-table-column的template中使用v-if来判断编辑标志位导致编辑输入框显示串行的问题
这个问题可能是由于v-if
导致的渲染优先级问题。v-if
会根据表达值的真假决定是否移除或重建元素。如果在编辑模式和非编辑模式之间频繁切换,可能会导致Vue实例的渲染优先级出现问题,使得输入框显示不正确。
解决方案可以是使用v-show
代替v-if
,或者将编辑模式的元素放在一个单独的组件中,这样每次切换只是在组件的显示状态之间切换,而不会影响其他元素。
使用v-show
的例子:
<template>
<el-table-column label="操作">
<template slot-scope="scope">
<div v-show="!scope.row.editFlag">
<!-- 非编辑模式下显示的内容 -->
<el-button @click="scope.row.editFlag = true">编辑</el-button>
</div>
<div v-show="scope.row.editFlag">
<!-- 编辑模式下显示的输入框 -->
<el-input v-model="scope.row.someData"></el-input>
<el-button @click="scope.row.editFlag = false">完成</el-button>
</div>
</template>
</el-table-column>
</template>
使用单独组件的例子:
<template>
<el-table-column label="操作">
<template slot-scope="scope">
<edit-component :row="scope.row"></edit-component>
</template>
</el-table-column>
</template>
<script>
import EditComponent from './EditComponent.vue';
export default {
components: {
EditComponent
}
}
</script>
然后在EditComponent
中处理显示逻辑:
<template>
<div>
<div v-if="!editMode">
<!-- 非编辑模式下显示的内容 -->
<el-button @click="editMode = true">编辑</el-button>
</div>
<div v-else>
<!-- 编辑模式下显示的输入框 -->
<el-input v-model="row.someData"></el-input>
<el-button @click="editMode = false">完成</el-button>
</div>
</div>
</template>
<script>
export default {
props: ['row'],
data() {
return {
editMode: false
};
}
}
</script>
这样,每行数据的编辑状态不会影响其他行,应该可以解决串行问题。
评论已关闭