解锁前端表单数据的秘密旅程:从后端到用户选择!✨

😄 解锁前端表单数据的秘密旅程:从后端到用户选择!✨

嘿,技术爱好者们!👋 你有没有在开发中遇到过这样的困惑:表单里的数据(比如图片附件、识别点 ID)从哪儿来的?是后端偷偷塞给你的,还是用户辛勤上传的?🤔 今天,我们要一起踏上一场“数据探秘之旅”,以 compare-form.vue 为案例,揭开 imagesgenuineIdentificationPointIdsfakeIdentificationPointIds 这三个“宝藏”的来源秘密!🔍 准备好啦?带上你的好奇心,跟我走!🚀


🎬 开场:表单数据的“身世之谜”

想象一下,你打开 compare-form.vue,看到这样的表单组件:

<w-form-multiple-image v-model="form.images" label="图片附件" />
<w-form-select v-model="form.genuineIdentificationPointIds" :list="identifies1" />
<w-form-select v-model="form.fakeIdentificationPointIds" :list="identifies2" />

这些字段绑定了 form.images(图片数组)、genuineIdentificationPointIds(真货识别点 ID 数组)和 fakeIdentificationPointIds(假货识别点 ID 数组)。它们的数据从哪儿冒出来的?是魔法吗?🪄 别急,我们来一步步解锁!


🕵️‍♀️ 第一站:watchValue — 数据的“初始化基地”

代码中的 @Watch('value') 像是数据的“出生证明”:

@Watch('value')
watchValue(v: any) {this.$nextTick(async() => {this.form = {...v,images: v.productPhotos ? JSON.parse(v.productPhotos) : [],genuineIdentificationPointIds: v.genuineIdentificationPoints ? JSON.parse(v.genuineIdentificationPoints) : [],fakeIdentificationPointIds: v.fakeIdentificationPoints ? JSON.parse(v.fakeIdentificationPoints) : []}})
}
  • 发现

    • value 是父组件传递的 props,v 是它的值。
    • form.imagesv.productPhotos 解析而来。
    • genuineIdentificationPointIdsv.genuineIdentificationPoints 解析。
    • fakeIdentificationPointIdsv.fakeIdentificationPoints 解析。
    • 如果没数据,默认是空数组 []
  • 推测:这些数据的“祖先”藏在 value 里,而 value 又是谁给的呢?🤔


🌍 第二站:父组件 index.vue — 数据的“中转站”

父组件是 src/views/tools/fake-strategy/index.vue,它通过 onCompare 将数据传递:

public async onCompare(row: any) {this.compareForm = rowthis.operateType = 'edit'this.compareFormVis = true
}
  • 关键

    • row 是表格一行数据,来自 this.list
    • compareForm = row 赋值给 :value="compareForm",传给 compare-form.vue
  • 数据流

    • row.productPhotosvalue.productPhotosform.images
    • row.genuineIdentificationPointsvalue.genuineIdentificationPointsform.genuineIdentificationPointIds
    • row.fakeIdentificationPointsvalue.fakeIdentificationPointsform.fakeIdentificationPointIds
  • 来源this.list 是从后端 qlist API 获取的。


🗃️ 第三站:后端 API — 数据的“老家”

index.vuegetList 揭示了终极来源:

public async getList() {const res: any = await qlist(this.listQuery)this.list = res?.data?.content
}
  • 真相

    • qlist'@/api/fake-registration' 导入。
    • res.data.content 是数组,每项 row 包含 productPhotosgenuineIdentificationPointsfakeIdentificationPoints
    • 例如:
      {"productPhotos": "[\"http://example.com/image1.jpg\", \"http://example.com/image2.jpg\"]","genuineIdentificationPoints": "[1, 2, 3]","fakeIdentificationPoints": "[4, 5]"
      }
      
  • 老家:后端数据库,通过 qlist API 提供。


🎨 第四站:动态更新 — 用户和 API 的“加成”

genuineIdentificationPointIdsfakeIdentificationPointIds 还能动态变化!通过 watchProductIdgetIdentificationPoints

@Watch('form.productId')
async watchProductId(newVal: any) {if (newVal) await this.getIdentificationPoints(newVal)
}private async getIdentificationPoints(productId: number) {const res: any = await request({url: `/identificationPoint/by-product-id-and-public-type/${productId}/all`})this.identifies1 = res.data.trueIdentificationPoints.map(item => ({id: item.id,name: `${item.id}   ${item.identificationPointTitle}`}))this.identifies2 = res.data.fakeIdentificationPoints.map(item => ({id: item.id,name: `${item.id}   ${item.identificationPointTitle}`}))
}
  • 作用

    • 根据 form.productId 获取产品相关的识别点。
    • identifies1identifies2<w-form-select> 的选项。
    • 用户选择后更新 form.genuineIdentificationPointIdsform.fakeIdentificationPointIds
  • 来源/identificationPoint API 提供动态选项。

  • images 动态:用户通过 <w-form-multiple-image> 上传新图片,更新 form.images


🎉 总结:数据的“家族树”

  1. images

    • 初始value.productPhotos(后端 qlistrow.productPhotos)。
    • 动态:用户上传。
    • 老家:后端 productPhotos 字段。
  2. genuineIdentificationPointIds

    • 初始value.genuineIdentificationPoints(后端 qlist)。
    • 动态:用户从 identifies1 选择,选项来自 /identificationPoint
    • 老家:后端 genuineIdentificationPoints 字段 + API 选项。
  3. fakeIdentificationPointIds

    • 初始value.fakeIdentificationPoints(后端 qlist)。
    • 动态:用户从 identifies2 选择,选项来自 /identificationPoint
    • 老家:后端 fakeIdentificationPoints 字段 + API 选项。

🎨 SVG 图解:数据的旅程

数据的旅程 - SVG 优化演示
数据的旅程 后端 qlist API row 数据 index.vue 传 value compare-form 初始化 form 用户选择/上传 /identificationPoint API 🎨

🛠️ 实践建议

  • 调试console.log(value) 查初始数据,console.log(identifies1, identifies2) 看动态选项。
  • 问题:若数据空,检查 qlist/identificationPoint API 返回。
  • 优化:加错误处理,防止 JSON.parse 失败。

😂 结尾彩蛋

如果数据“失踪”,可能是后端“小哥”忘了更新数据库!😄 赶紧催一催,或者检查网络,找到“宝藏”!👀 喜欢这篇博客?欢迎留言,我下期再带你探秘!🪄


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29322.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nerf流程

一.数据处理&#xff1a; 在输入数据时&#xff0c;并没有给出相机的内参与外参&#xff0c;需要在数据处理得出相机的内外惨数&#xff0c;作者使用COLMAP得到相机参数后&#xff0c;转成NeRF可以读取的格式即可以用于模型训练。 旋转矩阵的第一列到第三列分别表示了相机坐标系…

与中国联通技术共建:通过obdiag分析OceanBase DDL中的报错场景

中国联通软件研究院&#xff08;简称联通软研院&#xff09;在全面评估与广泛调研后&#xff0c;在 2021年底决定采用OceanBase 作为基础&#xff0c;自研分布式数据库产品CUDB&#xff08;即China Unicom Database&#xff0c;中国联通数据库&#xff09;。目前&#xff0c;该…

前端实现版本更新自动检测✅

&#x1f916; 作者简介&#xff1a;水煮白菜王&#xff0c;一位资深前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 前端专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧和知识归纳总结✍。 感谢支持&#x1f495;&#x1f495;&a…

GitHub教程

目录 1.是什么?2.安装3.创建库3.增删改查4.远程仓库5.分支6.标签7.使用流程8.总结 1.是什么? Git 是一个命令行工具&#xff0c;但也有许多图形用户界面可用。本地仓库&#xff0c;安装包下载到本地。Git 的一个流行 GUI 是 GitHub&#xff0c;它可以方便地管理存储库、推送…

VsCode + EIDE + OpenOCD + STM32(野火DAP) 开发环境配置

VsCode EIDE OpenOCD STM32(野火DAP) 开发环境配置 接受了新时代编辑器的我&#xff0c;实在受不了Keil的上古编辑页面&#xff0c;周树人说过&#xff1a;由奢入俭难&#xff0c;下面我们一起折腾一下开源软件Vscode&#xff0c; 用以开发51和STM32&#xff0c;有错误之处&…

【MySQL】表的增删查改(CRUD)(下)

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 本篇是继上篇的下篇&#xff0c;如果上篇没有看过小伙伴&#xff0c;可以先看看我的上一篇再来看一下这一篇【MySQL】表的增删查改&#xff08;CRUD&#xff09;&#xff08;上…

知识周汇 | Python操作Excel全攻略系列(一):模块详解篇

目录 系列文章 前言 1 知识概览 2 模块详解 2.1 openpyxl 2.2 pandas 2.3 xlrd 2.4 xlwt 2.5 xlsxwriter 2.6 xlwing 3 后续 系列文章 知识周汇 | Python操作Excel全攻略系列&#xff08;二&#xff09;&#xff1a;文件操作篇 知识周汇 | Python操作Excel全攻略系…

NVIDIA GPU 架构详解:Pascal、Volta、Turing、Ampere、Ada、Hopper、Blackwell

目录 1. Pascal&#xff08;帕斯卡&#xff09;架构&#xff08;2016&#xff09;关键技术性能特性代表产品应用场景 2. Volta&#xff08;伏特&#xff09;架构&#xff08;2017&#xff09;关键技术性能特性代表产品应用场景 3.Turing&#xff08;图灵&#xff09;架构&#…

SpringMVC学习(controller层加载控制与(业务、功能)bean加载控制、Web容器初始化配置类)(3)

目录 一、SpringMVC、Spring的bean加载控制。 &#xff08;1&#xff09;实际开发的包结构层次。 &#xff08;2&#xff09;如何"精准"控制两个容器分别加载各自bean。(分析) <1>SpringMVC相关bean加载控制。(方法) <2>Spring相关bean加载控制。(方法) …

通过Docker搭个游戏——疯狂大陆(Pkland)

最近在研究我的服务器&#xff0c;在服务器上搭了很多docker的项目&#xff0c;然后找着找着发现一个能用Docker配置环境的游戏叫Pkland。 项目地址&#xff1a;GitHub - popkarthb/pkland: 疯狂大陆是一款多人在线的战略游戏。 游戏操作简捷,您仅需要使用浏览器就可以在任何时…

【SpringBoot】深入解析 Maven 的操作与配置

Maven 1.什么是Maven? Maven是一个项目管理工具&#xff0c;通过pom.xml文件的配置获取jar包&#xff0c;而不用手动去添加jar包&#xff1b; 2. 创建一个Maven项目 IDEA本身已经集成了Maven&#xff0c;我们可以直接使用&#xff0c;无需安装 以下截图的idea版本为&#xff…

Cursor + IDEA 双开极速交互

相信很多开发者朋友应该和我一样吧&#xff0c;都是Cursor和IDEA双开的开发模式:在Cursor中快速编写和生成代码&#xff0c;然后在IDEA中进行调试和优化 在这个双开模式的开发过程中&#xff0c;我就遇到一个说大不大说小不小的问题&#xff1a; 得在两个编辑器之间来回切换查…

HarmonyOS:如何将图片转为PixelMap并进行图片缓存策略

前言&#xff1a;在HarmonyOS项目开发中&#xff0c;我们使用Ark-Ts语言开发项目。我们有个功能是拍照&#xff0c;除了正常显示出来&#xff0c;并且上传服务器。我在开发过程中&#xff0c;遇到的问题是&#xff0c;如果离开这个页面再回到当前页面仍要显示图片&#xff0c;那…

ctf网络安全比赛有一张图片怎么查看

0102-JavaScript简介&&作用 02简介 JavaScript 是互联网上最流行的脚本语言&#xff0c;这门语言可用于 HTML 和 web&#xff0c;更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。 03作用 JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语…

搭建一个简单的node服务,模拟后端接口

目录 一、查看是否安装了node和npm 二、创建一个文件夹&#xff0c;用于放你的node服务代码 三、初始化一个package.json 四、安装 Express&#xff08;快速搭建服务的框架&#xff09; 五、创建serve.js 六、运行服务即可 七、测试接口 法一&#xff1a;使用 curl 法…

【五.LangChain技术与应用】【31.LangChain ReAct Agent:反应式智能代理的实现】

一、ReAct Agent是啥?为什么说它比「普通AI」聪明? 想象一下,你让ChatGPT查快递物流,它可能直接编个假单号糊弄你。但换成ReAct Agent,它会先推理(Reasoning)需要调用哪个接口,再行动(Action)查询真实数据——这就是ReAct的核心:让AI学会「动脑子」再动手。 举个真…

BUUCTF逆向刷题笔记(1-12)

easyre、内涵的软件、xor、不一样的flag&#xff1a; buuctf reverse部分题解&#xff08;实时更新&#xff09;_reverse 题解-CSDN博客 请见小库里的blog。 reverse1 查壳发现没有&#xff0c;而且是64位 粗略改一下部分函数名&#xff0c;看看主要逻辑。 第一个for循环暂…

OceanBase-obcp-v3考试资料梳理

集群架构 基本概念 集群: 集群由一个或多个Region组成,Region 由一个或多个Zone组成,Zone由一个或多个OBServer组成,每个OBServer里有若干个partition的Replica。 Region: 对应物理上的一个城市或地域,当OB集群由多个Region组成时, 数据库的数据和服务能力就具备地域…

【C++】双指针算法

我们还有更长的路要走&#xff0c;不过没关系&#xff0c;道路就是生活。 前言 这是我自己学习蓝桥杯算法的第一篇博客总结。后期我会继续把蓝桥杯算法学习笔记开源至博客上。 技巧 1. 双指针算法&#xff0c;但实际上是利用数组下标来充当指针&#xff0c;并不是直接使用指…

如何使用MyBatis进行多表查询

前言 在实际开发中&#xff0c;对数据库的操作通常会涉及多张表&#xff0c;MyBatis提供了关联映射&#xff0c;这些关联映射可以很好地处理表与表&#xff0c;对象与对象之间的的关联关系。 一对一查询 步骤&#xff1a; 先确定表的一对一关系确定好实体类&#xff0c;添加关…