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就会刷新的

阅读 6.1k
1 个回答

更改数据没有响应更新,大概率就是拷贝了数据所以失去响应。查看源码发现确实拷贝了数组,没有使用源数据进行渲染,所以你需要更改它的数据源才能触发也就是重新赋值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: 或许还有其他方法,没用过这个,只是粗看了下文档,好像没发现有什么配置,可以再多看看文档,或者百度看看

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题