分析 w-form-multiple-image.vue 文件中 console.log(v) 打印的内容

news/2025/2/25 20:14:48

文章目录

      • 父组件中的使用
      • 子组件中的 `console.log(v)`
      • 父组件中 `form` 的数据流
        • 初始化
        • 用户上传图片
        • 保存时的处理
      • `console.log(v)` 的具体输出
      • 为什么有两个 `console.log(v)`?
      • 示例场景
      • 结论

  • 下面这张图,是首次打开登记表单(也就是添加)控制台首次打印console.log(v)的内容
    在这里插入图片描述

  • 子组件(w-form-multiple-image)
  • 父组件(ave-form)

准确地分析你的 w-form-multiple-image.vue 文件中 console.log(v) 打印的内容。这个父组件是一个对话框表单(ave-form),其中使用了 w-form-multiple-image 组件来处理“产品照片”和“购买记录”的多图上传。我们来一步步分析。


父组件中的使用

在你的父组件模板中,w-form-multiple-image 被用在了两个地方:

  1. 产品照片

    <w-form-multiple-image
      v-model="form.productPhotos"
      label="产品照片"
      label-width="120px"
      :operate-type="operateType"
      folder-name="fake-strategy"
      :limit="4"
    />
    
    • v-model="form.productPhotos":绑定到 form.productPhotos,表示这个字段的值会通过 value 属性传入组件,并通过 input 事件更新。
  2. 购买记录

    <w-form-multiple-image
      v-model="form.purchaseRecords"
      label="购买记录"
      label-width="120px"
      :operate-type="operateType"
      folder-name="fake-strategy"
      :limit="4"
    />
    
    • v-model="form.purchaseRecords":绑定到 form.purchaseRecords,类似上面。

子组件中的 console.log(v)

在你的 w-form-multiple-image.vue 文件中:

@Watch('value')
watchVal(v: any) {
  console.log(v)
  this.val = v
}
  • value:通过 @Prop 传入的值,这里对应父组件绑定的 form.productPhotosform.purchaseRecords
  • watchVal:当 value 变化时触发,vvalue 的新值。
  • console.log(v):打印 v 的值。

父组件中 form 的数据流

让我们看看 form.productPhotosform.purchaseRecords 的值是如何变化的,从而确定 console.log(v) 的输出。

初始化
  • form 的定义

    private form: any = {}
    
    • 初始时,form 是一个空对象,form.productPhotosform.purchaseRecords 未定义(即 undefined)。
  • @Watch('value') 的初始化逻辑

    @Watch('value')
    watchValue(v: any) {
      this.$nextTick(() => {
        this.getProducts()
        const formData = {
          ...v,
          productPhotos: v.productPhotos ? JSON.parse(v.productPhotos) : [],
          purchaseRecords: v.purchaseRecords ? JSON.parse(v.purchaseRecords) : []
        }
        this.form = formData
      })
    }
    
    • value 是父组件传入的外部数据(通过 @Prop)。
    • 如果 v.productPhotosv.purchaseRecords 存在,会被 JSON.parse 解析为数组;否则,默认是空数组 []
    • this.form 被更新为包含这些字段的对象。
  • 初始输出

    • 如果父组件传入的 value{ productPhotos: '["img1.jpg"]', purchaseRecords: '["receipt1.jpg"]' }
      • form.productPhotos 变为 ['img1.jpg']
      • form.purchaseRecords 变为 ['receipt1.jpg']
    • 如果未传入 value 或字段缺失:
      • form.productPhotosform.purchaseRecords 都是 []
    • form.productPhotosform.purchaseRecords 被赋值时,w-form-multiple-imagevalue 变为对应值,触发 watchValconsole.log(v) 打印:
      • 对于“产品照片”:['img1.jpg'][]
      • 对于“购买记录”:['receipt1.jpg'][]
用户上传图片
  • 当用户通过 w-form-multiple-imageUploadImage 组件上传图片:
    • handleUploadSucc(e) 被调用:
      public handleUploadSucc(e: any) {
        this.$emit('input', e)
      }
      
    • e 是上传结果,通常是一个图片路径数组(如 ['newphoto.jpg'])。
    • this.$emit('input', e) 更新父组件的 form.productPhotosform.purchaseRecords
    • 父组件的 v-model 绑定导致 value 更新,触发子组件的 watchVal
    • console.log(v) 输出
      • 如果上传到“产品照片”,打印 ['newphoto.jpg']
      • 如果上传到“购买记录”,打印 ['newreceipt.jpg']
保存时的处理
  • handleSubmitsave 中:
    private handleSubmit() {
      // ...
      console.log(this.form.productPhotos)
      console.log(this.form.purchaseRecords)
      this.form.comparisonStatus = 1
      this.save()
    }
    private async save() {
      const data = {
        ...this.form,
        productPhotos: JSON.stringify(this.form.productPhotos),
        purchaseRecords: JSON.stringify(this.form.purchaseRecords)
      }
      const res: any = await esave(data)
      // ...
    }
    
    • 保存时,form.productPhotosform.purchaseRecords 被转为 JSON 字符串。
    • 但这不直接影响 console.log(v),因为 v 是传入时的值。

console.log(v) 的具体输出

根据上下文,console.log(v) 打印的值是:

  1. 对于 <w-form-multiple-image v-model="form.productPhotos">
    • 初始[](如果父组件未传入数据)或 ['img1.jpg', ...](如果传入并解析)。
    • 上传后['newphoto.jpg', ...](用户上传的结果)。
  2. 对于 <w-form-multiple-image v-model="form.purchaseRecords">
    • 初始[]['receipt1.jpg', ...]
    • 上传后['newreceipt.jpg', ...]

为什么有两个 console.log(v)

因为你用了两个 w-form-multiple-image 实例:

  • 一个绑定 form.productPhotos,打印与产品照片相关的数据。
  • 一个绑定 form.purchaseRecords,打印与购买记录相关的数据。

示例场景

假设:

  1. 父组件传入 value = { productPhotos: '["initial.jpg"]', purchaseRecords: null }
    • 初始化后:
      • form.productPhotos = ['initial.jpg'],打印 ['initial.jpg']
      • form.purchaseRecords = [],打印 []
  2. 用户给“产品照片”上传一张图,返回 ['uploaded.jpg']
    • form.productPhotos 更新为 ['uploaded.jpg']
    • console.log(v) 打印:['uploaded.jpg']
  3. 用户给“购买记录”上传两张图,返回 ['receipt1.jpg', 'receipt2.jpg']
    • form.purchaseRecords 更新为 ['receipt1.jpg', 'receipt2.jpg']
    • console.log(v) 打印:['receipt1.jpg', 'receipt2.jpg']

结论

在你的 w-form-multiple-image.vue 中,console.log(v) 打印的是:

  • form.productPhotosform.purchaseRecords 的新值。
  • 通常是图片路径数组(如 ['image1.jpg', 'image2.jpg']),具体取决于初始数据或上传结果。
  • 如果未初始化或无数据,可能是 []

http://www.niftyadmin.cn/n/5865912.html

相关文章

后端之JPA(EntityGraph+JsonView)

不同表之间的级联操作或者说关联查询是很多业务场景都会用到的。 对于这种需求最朴素的方法自然是手动写关联表&#xff0c;然后对被关联的表也是手动插入数据。但是手写容易最后写成一堆shit代码&#xff0c;而且修改起来也是非常麻烦的。 学会使用现成的工具还是非常有利的…

硬件工程师入门教程

1.欧姆定律 测电压并联使用万用表测电流串联使用万用表&#xff0c;红入黑出 2.电阻的阻值识别 直插电阻 贴片电阻 3.电阻的功率 4.电阻的限流作用 限流电阻阻值的计算 单位换算关系 5.电阻的分流功能 6.电阻的分压功能 7.电容 电容简单来说是两块不连通的导体加上中间的绝…

Ubuntu20.04之VNC的安装使用与常见问题

Ubuntu20.04之VNC的安装与使用 安装图形桌面选择安装gnome桌面选择安装xface桌面 VNC-Server安装配置开机自启 VNC Clientroot用户无法登入问题临时方案永久方案 安装图形桌面 Ubuntu20.04主流的图形桌面有gnome和xface两种&#xff0c;两种桌面的安装方式我都会写&#xff0c…

PHP-综合4

[题目信息]&#xff1a; 题目名称题目难度PHP-综合42 [题目考点]&#xff1a; PHP综合训练[Flag格式]: SangFor{Ouk3i63BuShgxqdRcn_9kMNqKFDe5j4f}[环境部署]&#xff1a; docker-compose.yml文件或者docker tar原始文件。 http://分配ip:2087[题目writeup]&#xff1a;…

自学Linux系统软件编程第四天

进程 概念 进程&#xff1a;就是程序执行的过程&#xff0c;包括创建、调度和消亡&#xff0c;是活的 程序&#xff1a;一段数据的…

vue2中,打包报错ERROR in /node_modlules/@types/lodash/common/common.d.ts 26

报错如下&#xff1a; 解决 尝试安装lodash另外一个版本&#xff0c;然后重新打包 npm install --save types/lodash4.14.74

WPS计算机二级•文档的页面设置与打印

听说这是目录哦 纸张大小页边距和装订线❤️‍&#x1f525;打印界面讲解❤️缩印&#x1f495;打印作文稿纸&#x1f49e;将文档打印成书籍&#x1f493;限制编辑设置&#x1f497;给文字文档加密&#x1f496;文档导出为 PDF格式&#x1f498;协作编辑模式&#x1f49d;能量站…

使用 Apache Jena 构建 RDF 数据处理与查询服务

一、引言 随着语义网和知识图谱技术的不断发展&#xff0c;RDF&#xff08;Resource Description Framework&#xff09;作为一种用于描述资源的框架&#xff0c;被广泛应用于知识表示和数据集成。Apache Jena 是一个功能强大的 Java 框架&#xff0c;用于处理 RDF 数据和 SPA…