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

news2025/4/21 14:24:34

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

嘿,技术爱好者们!👋 你有没有在开发中遇到过这样的困惑:表单里的数据(比如图片附件、识别点 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 = row
  this.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.coloradmin.cn/o/2311933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机械视觉】C#+visionPro联合编程———【一、C# + VisionPro 联合编程详解以及如何将visionPro工具加载到winform】

机械视觉与 C# VisionPro 联合编程详解 目录 机械视觉与 C# VisionPro 联合编程详解 概念 应用场景 1. 工业检测与质量控制缺陷检测 2. 定位与机器人引导 3. 识别与分类 4. 复杂流程控制 将visionPro工具加载到winform 环境准备 一、创建winform项目 二、打开窗体…

江科大51单片机笔记【9】DS1302时钟可调时钟(下)

在写代码前&#xff0c;记得把上一节的跳线帽给插回去&#xff0c;不然LCD无法显示 一.DS1302时钟 1.编写DS1302.c文件 &#xff08;1&#xff09;重新对端口定义名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;&#xff08;2&#xff09;初始化 因为…

发行思考:全球热销榜的频繁变动

几点杂感&#xff1a; 1、单机游戏销量与在线人数的衰退是剧烈的&#xff0c;有明显的周期性&#xff0c;而在线游戏则稳定很多。 如去年的某明星游戏&#xff0c;最高200多万在线&#xff0c;如今在线人数是48名&#xff0c;3万多。 而近期热门的是MH&#xff0c;在线人数8…

微信小程序接入deepseek

先上效果 话不多说&#xff0c;直接上代码&#xff08;本人用的hbuilder Xuniapp&#xff09; <template><view class"container"><!-- 聊天内容区域 --><scroll-view class"chat-list" scroll-y :scroll-top"scrollTop":…

为解决局域网IP、DNS切换的Windows BAT脚本

一、背景 为解决公司普通人员需要切换IP、DNS的情况&#xff0c;于是搞了个windows下的bat脚本&#xff0c;可以对有线网络、无线网络进行切换设置。 脚本内容 echo off title 多网络接口IP切换工具:menu cls echo echo 请选择要配置的网络接口: echo echo 1. 有线网络&am…

VUE3开发-9、axios前后端跨域问题解决方案

VUE前端解决跨域问题 前端页面需要改写 如果无效&#xff0c;记得重启服务器 后端c#解决跨域问题 前端js取值&#xff0c;后端c#跨域_c# js跨域-CSDN博客

【计算机网络】计算机网络的性能指标——时延、时延带宽积、往返时延、信道利用率

计算机网络的性能指标 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 在上一篇内容中我们介绍了计算机网络的三个性能指标——速率、带宽和吞吐量。用大白话来说就是&#xff1a;网速、最高网速和实时网速。 相信大家看到这三个词应该就…

Kubermetes 部署mysql pod

步骤 1: 创建 PersistentVolume 和 PersistentVolumeClaim 首先为 MySQL 创建一个 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来确保数据的持久性。 mysql-pv.yaml&#xff1a; apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volume spec:cap…

Docker和DockerCompose基础教程及安装教程

Docker的应用场景 Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。 CentOS Docker 安装 使用官方安装脚本自动安装 安装命令…

网络安全等级保护—定级

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 网络安全等级保护五个保护等级 五个保护等级 受侵害的客体 对客体的侵害程度 一般损害 严重损害 特别严重损害 公民、法人和其他组织的合法权益 第一级 第二级 …

macos 程序 运行

sudo xattr -r -d com.apple.quarantine [/Applications/Name]使用stow 管理配置文件

UVC for USBCamera in Android

基于UVC 协议&#xff0c;完成USBCamera 开发 文章目录 一、目的&#xff1a;二、USBCamera 技术实现方案难点 三、误区&#xff1a;四、基础补充、资源参考架构图了解Camera相关专栏零散知识了解部分相机源码参考&#xff0c;学习API使用&#xff0c;梳理流程&#xff0c;偏应…

Docker 安装 Nacos 2.1.1(单机版)

一、拉取镜像 docker pull nacos/nacos-server:v2.1.1 二、新建数据库 官网上下载 对应版本的 nacos zip 包&#xff0c;在 nacos\conf 目录下有 mysql脚本&#xff1a; 新建一个数据库 nacos_config&#xff0c;在数据库中依次执行 nacos-mysql.sql、1.4.0-ipv6_support-up…

网络安全数据富化 网络数据安全处理规范

本文件规定了网络运营者开展网络数据收集、存储、使用、加工、传输、提供、公开等数据处理的安全 技术与管理要求。 本文件适用于网络运营者规范网络数据处理,以及监管部门、第三方评估机构对网络数据处理进行 监督管理和评估。 部分术语和定义 数据&#xff08;data&#x…

深入理解 C 语言函数的定义

在 C 语言的编程世界里&#xff0c;函数是构建复杂程序的基石。理解函数的定义与运用&#xff0c;对于编写高效、可维护的代码至关重要。​ 函数定义的基本概念​ 函数是一组执行特定任务的代码块。它将一个复杂的问题分解为一个个小的、可管理的部分&#xff0c;提高了代码的…

SQL注入练习场:PHPStudy+SQLI-LABS靶场搭建教程(零基础友好版)

注意&#xff1a;文中涉及演示均为模拟测试&#xff0c;切勿用于真实环境&#xff0c;任何未授权测试都是违法行为&#xff01; 一、环境准备 下载PHPStudy 官网下载地址&#xff1a;https://www.xp.cn/php-study&#xff08;选择Windows版&#xff09; 安装时建议选择自定…

WordPress报502错误问题解决-php-fpm-84.service loaded failed failed LSB: starts php-fpm

文章目录 问题描述问题排查问题解决 问题描述 服务器环境&#xff1a; php&#xff1a;8.4MySQL&#xff1a;8.0Nginx&#xff1a;1.26.2 在访问站点时&#xff0c;一直报502&#xff0c;而两天前还能正常访问。 问题排查 导致502的问题很多&#xff0c;比如站点访问量太大…

uniapp 微信小程序 升级 uniad插件版本号

问题描述&#xff1a; 每次提交代码升级的时候会弹窗提示&#xff1a;uniad插件版本太低… 解决办法 一、使用微信小程序开发工具点击右上角 查看到最新版本&#xff1a;1.3.4 二、在app.json中改为最新的版本即可 "uni-ad": {"version": "1.3.4&q…

使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile

比起容器、镜像来说&#xff0c;Dockerfile 非常普通&#xff0c;它就是一个纯文本&#xff0c;里面记录了一系列的构建指令&#xff0c;比如选择基础镜像、拷贝文件、运行脚本等等&#xff0c;每个指令都会生成一个 Layer&#xff0c;而 Docker 顺序执行这个文件里的所有步骤&…

使用 Apache POI 实现 Excel 单元格合并

在日常工作中&#xff0c;Excel 是一个不可或缺的工具&#xff0c;尤其是在处理大量数据时。为了提升数据的可读性和美观性&#xff0c;我们经常需要对 Excel 中的单元格进行合并操作。本文将介绍如何使用 Apache POI 库在 Java 中实现 Excel 单元格的合并&#xff0c;并提供一…