为什么响应式数据变了,但是视图没有更新呢?
没有后端,简单模拟了一下后端的数据和操作。
// 服务端数据库中的数据const serverTableData = [ { id: 1, name: "peter", age: "18" }, { id: 2, name: "tom", age: "17" }]
最开始的时候,加载服务端数据到本地,并将其转换为一个响应式数据(这样我们就可以操作这个响应式数据来自动更新表格显示了)
// 最开始,加载服务端数据const localTableData = ref(serverTableData);function update() { // 获取最新数据(模拟) localTableData.value = serverTableData; console.log("update", localTableData.value, serverTableData);}
本地编辑修改数据
const editingItem = ref(); // 当前修改的内容,将会作为编辑表单的内容function handleEdit(index, row) { console.log("edit"); console.log("index: ", index, " row: ", row); console.log("update editing Item"); // 获取当前编辑行的副本 // 注意点: 在修改的时候,输出表格中的对应条目不能跟着改变 editingItem.value = {...row}; openDrawer();}
模拟将修改内容上传到服务端,服务端修改数据库(先删除原来的,然后添加编辑过后的)和结果提示
async function saveEditedItem(formInstance) { // 模拟服务端操作 const editIndex = serverTableData.findIndex(e => e.id === editingItem.value.id); if(editIndex !== -1) { serverTableData.splice(editIndex, 1); serverTableData.push({...toValue(editingItem)}); console.log("after edite item, serverTableData: ", serverTableData); await simulateOperation(); ElMessage({ message: "修改成功", type: "success", duration: 1000 }) }else { await simulateOperation(); ElMessage({ message: "修改失败", type: "error", duration: 1000 }) } closeDrawer();}async function simulateOperation() { startLoading(); await sleep(1); endLoading();}
编辑修改之后,点击获取最新数据按钮,表格中的数据并没有发生变化,为什么?
附:
element plus playground
1、saveEditedItem中不应该对serverTableData进行操作,而应该操作localTableData.value,localTableData才是响应式数据,serverTableData不是
2、代码中localTableData的赋值操作都是对serverTableData的直接操作,赋值来赋值去值都一样,没有改变,也就不会更新页面。可以对serverTableData进行结构localTableData.value = [...serverTableData]
。真实的数据接口不需要,因为接口返回的都是新的数据
为el-transfer添加了一个右侧列表上下排序的功能,但是点击之后数组数据更新了,视图却没刷新.代码如下:
lineChart 组件代码 调用代码 赋值代码 注意 option 我定义的是 ref的 难道要定义成reactive的空对象????试了 报错
我想安装Primeng7.0.0到我的Angular项目,但首先我需要更新我的JHipster到最后一个版本。 当我将此命令写入terminal时,我得到以下错误
当我使用url/Details时,我的浏览器会导航到该url,但不会更改视图。任何其他路由抛出404,因此它似乎可以识别路由,但不能更新。
我发现这样可以做到动态绑定,但是修改placeholder响应式会丢失。有没有什么办法能动态绑定prop,且留有响应式。
我希望在5秒钟后,输出改变by它停留在。这是为什么?我还需要做什么吗?
例如我创建了一个dataHook main.ts中 页面有个按钮就执行v.value += 1,为什么console.log还是原值1呢?
直截了当的问题是,似乎无法在用户完成表单后指向的视图中显示我的viewBag值。 请指教...谢谢 我的索引操作结果简单返回模型数据。 my Get Edit”action result,只是使用相同的模型数据作为索引。 My Post"Edit"ActionResult,将新值(如果有)分配给模型并重定向到Index页面,但Index页面不显示ViewBag值?? 在我的索引视图中。。。