vue3复杂表单列表,根据表单内容是否改变判断是否弹出离开前保存提示(用户修改后又改回原来的数据不触发保存提示)

背景及问题

适用于整个表单列表直接整个提交的情况

  1. 切换路由前提示表单未保存,怎样在表单内容修改后触发(用户修改后又改回原来的数据不触发保存提示)?
  2. 复杂表单如何监听值变化情况?

解决办法

整体思路:
在页面挂载时设置flag=false ——》调取表单列表后设置为true——》监听表单列表内容判断flag值——》切换路由判断flag值是否为false,弹出提示

//设置初始值
const flag=ref(false)
//接收接口返回列表后,设置flag为true
function(){
flag.value=true
}
//路由守卫判断提示弹出
onBeforeRouteLeave((to,from,next)=>{
if(!flag.value){
ElMessageBox.confirm('数据未保存,是否确认退出','提示',{
distinguishCancelAndClose:true,
showCancelButton:true,
confirmButtonText:'确认'
}).then(()=>{
next()
}).catch(()=>{
next(false)
})
}else{
next()
}
})

那么如何对复杂数组对象如何监听值?
首先由于复杂数组对象list嵌套有多层,监听时即使我们加上了deep:true属性,我们会发现newVal和oldVal始终相等,所以我们就需要用到计算属性computed并对计算后的值进行监听

假设我们从接口获取到的数据为list,同时设置变量
listParse.value=JSON.parse(JSON.stringfy(res.data||[]))

const listData=computed(()=>{
JSON.parse(JSON.stringfy(list||[]))
})
watch(listData,
val=>{
if(val?.length!==listParse.value?.length){
flag.value=false
}
flag.value=_.isEqual(listParse.value,val)
},
{deep:true})


注:isEqual为lodash的api

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue 3中,可以通过表单修改多条数据。下面是一个示例,展示如何使用表单同时修改多条数据: 首先,在Vue组件中定义一个数据对象,用来保存多条数据: ```vue <template> <form @submit="handleSubmit"> <div v-for="item in items" :key="item.id"> <input v-model="item.name" type="text" /> <input v-model="item.age" type="number" /> </div> <button type="submit">保存</button> </form> </template> <script> import { ref } from 'vue'; export default { data() { return { items: [ { id: 1, name: 'John', age: 25 }, { id: 2, name: 'Jane', age: 30 }, // ... ], }; }, methods: { handleSubmit() { // 处理表单提交逻辑 // 可以在这里将修改后的数据发送给后端进行保存 console.log(this.items); }, }, }; </script> ``` 在上述代码中,我们通过`v-for`指令遍历`items`数组中的数据,并使用`v-model`指令绑定输入框的值。这样,当用户输入内容时,`items`中对应数据的值会自动更新。 然后,在表单的提交事件处理函数`handleSubmit`中,可以获取到修改后的数据。你可以在该函数中进行进一步的处理,例如将修改后的数据发送给后端进行保存。 请注意,上述代码中的示例是使用Vue 3的Composition API(`ref`函数)来定义数据对象。如果你使用的是Options API,可以将`items`定义为普通的数据属性。 这是一个简单的示例,你可以根据实际业务需求进行修改和扩展,例如添加校验、数据同步等逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿乐今天敲代码没

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值