vue3 setup 对vxe-table表格组件绑定的数组进行增删改,但表格没有刷新同步,怎么解决?
在vue3使用vxe-table表格组件,在script setup 标签内使用。我要实现增删改查。
我不想用vxetable官方提供的机制去搞增删改查。也就是ref<VxeTableInstance>()这种,表格组件上使用ref="xTable",然后调用例如xTable.insert进行新增
我要用js数组提供的push、unshift、splice进行新增和删除,通过数组索引修改制定属性,实现行内容编辑。进而刷新vxe-table组件内容中显示的数据,
现在的问题是,写完了测试代码,在组件的动作事件中,或者使用axios在请求成功后,对vxe-table组件绑定的集合进行增删改,修改成成功了,但是vxe-table组件不刷新数据
测试的代码
<template><button @click="testClick()">测试</button>
<vxe-table :data="model.list">
<vxe-column field="name" title="名字"></vxe-column>
</vxe-table>
</template>
<script setup>
import { ref, reactive } from "vue";
const model=reactive({
list:[]
})
//添加数据,vxetable成功刷新
model.list.push({name:"名字"})
const testClick=()=>{
//添加成功,但vxe-table并未刷新新行
model.list.push({name:"名字"})
//编辑成功,但vxe-table并未刷新编辑后的内容
model.list[0].name="123"
}
</script>
上面的代码,在加载的时候,model.list.push({name:"名字"})调用的时候,vxe-table表格组件,有内容。
但在点击按钮的时候,按钮点击时间中,对vxe-table表格绑定的集合,调用push方法新增数据、给第一行的name属性赋值新数据进行修改,都没有使vxe-table刷新表格中的数据。
vxe-table需要配置什么,才能通过数组的push、unshift、splice更新内容的时候,刷新vxe-table组件显示的数据内容?
上面的代码,只把vxe-table标签换成element-plus的表格组件,调用push、unshift、splice就会刷新的
回答:
更改数据没有响应更新,大概率就是拷贝了数据所以失去响应。查看源码发现确实拷贝了数组,没有使用源数据进行渲染,所以你需要更改它的数据源才能触发也就是重新赋值model.list
为一个新数组,又或者更简单点,watch
这个list
,然后调用vex-table
实例的loadData
方法去通知组件更新数据。
<template><button @click="testClick()">测试</button>
<vxe-table ref="table" :data="model.list">
<vxe-column field="name" title="名字"></vxe-column>
</vxe-table>
</template>
<script setup>
import { ref, reactive, watch } from "vue";
const table = ref(null)
const model=reactive({
list:[]
})
watch(model.list, data => table.value.loadData(data))
//添加数据,vxetable成功刷新
model.list.push({name:"名字"})
const testClick=()=>{
//添加成功,但vxe-table并未刷新新行
model.list.push({name:"名字"})
//编辑成功,但vxe-table并未刷新编辑后的内容
model.list[0].name="123"
}
</script>
ps: 或许还有其他方法,没用过这个,只是粗看了下文档,好像没发现有什么配置,可以再多看看文档,或者百度看看
以上是 vue3 setup 对vxe-table表格组件绑定的数组进行增删改,但表格没有刷新同步,怎么解决? 的全部内容, 来源链接: utcz.com/p/933776.html