Vue 3 中动态表单怎么保存和加载用户填写的草稿

小强小哥_3638

小强小哥_3638

2026-11-06

251人浏览

原创

动态表单草稿保存与加载的关键是精准维护结构、类型和唯一标识:每行需UUID等稳定key,v-for绑定该key;完整序列化含嵌套字段与附件元信息;加载时严格转换数值、布尔、日期类型;用isDraftLoaded控制渲染时机确保一次正确渲染。

vue 3 中动态表单怎么保存和加载用户填写的草稿

动态表单的草稿保存和加载,关键不在“存”,而在“怎么存得准、读得对”。很多问题不是没保存,而是保存时丢了结构、类型或标识,导致加载后数据错位、丢失或计算异常。

确保每项动态内容都有唯一身份

动态添加的行(比如费用明细、问卷题目)必须带稳定、不可复用的唯一 ID,不能用数组索引(index)做 key 或标识。Vue 会因 key 不稳定而错误复用或销毁 DOM,造成输入内容错乱或消失。

  • 添加新行时生成 UUID 或时间戳+随机数:id: Date.now() + '-' + Math.random().toString(36).substr(2, 9)
  • 所有嵌套字段(如明细里的数量、单价)都应挂载在该行的 id 对应对象下,避免扁平化存储
  • 渲染列表时,v-for 的 :key 必须是这个唯一 id,不是 index

完整序列化整个表单结构

草稿数据必须包含所有可变部分:基础字段 + 动态列表 + 文件元信息。常见错误是只保存顶层字段,漏掉嵌套数组或对象。

Springboot Vue Builder
Springboot Vue Builder

从零开始编排 SpringBoot+Vue 全栈项目工作流,适用于新建全栈项目或完整脚手架请求,触发后依次调用 product‑spec‑builder(需求调研)等模块。

下载
  • 构建保存数据时,显式提取全部字段:{ title, type, items: formData.items, attachments: formData.attachments.map(a => ({ id: a.id, name: a.name, url: a.url })) }
  • 附件不能只存文件对象(浏览器 File 实例无法序列化),要存上传后的服务端 ID 或临时 URL + 元信息
  • 使用 JSON.stringify() 前,先检查是否有函数、undefined、Date 等非法值;必要时用 dayjs 格式化日期,用 Number() 显式转数字

加载时严格还原数据类型与结构

后端返回的草稿数据通常是字符串或 number 字面量,前端需主动转换回预期类型,否则会导致校验失败、计算出错或组件不响应。

  • 数量、单价等数值字段,赋值前统一用 Number(value) 转换,避免字符串拼接
  • 布尔字段(如是否必填)接收 "1"、"true" 或 1 时,用 value === true || value === 'true' || value === '1' 判断
  • 日期字段用 dayjs(value).toDate() 转为 Date 实例,再传给 DatePicker 组件
  • 动态列表加载后,逐项检查是否存在 id,缺失则跳过或补默认结构,防止渲染异常

控制好组件渲染时机

别让空数据抢先渲染一次,再被真实草稿覆盖。尤其在异步加载场景下,初始状态应保持“未就绪”,直到草稿数据真正落地。

  • 用一个 isDraftLoaded 响应式标志位控制表单是否可交互;初始为 false
  • loadDraft() 完成后才设为 true,并把数据深拷贝赋给表单响应式对象
  • 模板中加 v-if="isDraftLoaded",确保 DOM 只基于最终数据渲染一次
  • 避免在 onMounted 里直接调用 loadDraft() 后立即关闭 loading —— 应在 await loadDraft() 之后再更新状态

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vue.js vue vue 3

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2863

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

6223

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

7130

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6958

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

983

5

vue2.0和3.0区别
vue2.0和3.0区别

vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.17

1754

5

vue3的生命周期有哪些
vue3的生命周期有哪些

vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

12482

5

Vue3组合式API与组件开发实战
Vue3组合式API与组件开发实战

本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

2026.02.10

336

23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 17.4万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习