在 Vue 组件中,如何确认父组件在 add 模式下传入 value 的情况及其对子组件 getProducts() 方法的触发影响?

文章目录

      • 父组件中 `<ave-form>` 的使用
      • `add` 模式下触发逻辑
        • `value` 的传入情况
        • 是否触发 `getProducts()`?
      • 验证 `add` 模式下 `getProducts()` 是否触发
        • 结论:
      • 检查父组件传入 `value` 的完整情况
      • 如何明确知道父组件传入的 `value`
      • 最终回答

  • 父组件 index.vue
  • 子组件 ave-form.vue

父组件的代码(src/views/tools/fake-strategy/index.vue)。现在我可以准确分析父组件如何传入 value<ave-form> 组件,尤其是在 add 模式下。以下是详细的分析和回答:


父组件中 <ave-form> 的使用

在父组件的模板中,<ave-form> 是这样定义的:

<ave-form:clist="clist.admins":value="aveForm":visible="aveFormVis":operate-type="operateType"@close="onAveFormClose"
/>
  • :value="aveForm"value 属性绑定到父组件的数据属性 aveForm
  • :operate-type="operateType":操作模式由 operateType 控制。
  • :visible="aveFormVis":控制对话框的显示。

关键点在于:value 的值取决于 aveForm 的内容,而 aveForm 在不同情况下会发生变化。我们需要检查 add 模式下 aveForm 的赋值逻辑。


add 模式下触发逻辑

在父组件中,handleAdd() 方法用于打开 add 模式的对话框:

public handleAdd() {this.aveForm = Object.assign({}, {});this.aveFormVis = true;this.operateType = 'add';
}
  • 赋值this.aveForm = Object.assign({}, {})aveForm 设置为一个新的空对象 {}
  • 显示对话框this.aveFormVis = true 打开 <ave-form>
  • 模式this.operateType = 'add' 设置为 add 模式。
value 的传入情况
  • 初始值
    • aveForm 在组件初始化时定义为:
      public aveForm: any = {};
      
      这意味着 <ave-form>value 默认是一个空对象 {}
  • 调用 handleAdd()
    • this.aveForm = Object.assign({}, {}) 重新将 aveForm 赋值为一个新的空对象 {}
    • 这看起来与初始值相同,但由于它是新对象,会触发 Vue 的响应式更新。
是否触发 getProducts()

现在回到子组件(ave-form.vue)的逻辑:

@Prop({ default: () => {} })
private value?: any;@Watch('value')
watchValue(v: any) {this.$nextTick(() => {this.getProducts();const formData = { ...v, /* ... */ };this.form = formData;});
}
  • 初次挂载

    • <ave-form> 组件初次挂载时,valueundefined 变为默认值 {}
    • 但注意:Vue 的 @Watch 默认不会对初始值触发,仅对后续变化生效,除非设置 immediate: true(当前代码未设置)。
    • 因此,组件挂载时 getProducts() 不会触发
  • 调用 handleAdd()

    • this.aveForm{}(旧对象)变为 {}(新对象)。
    • 虽然值看起来相同,但因为 Object.assign({}, {}) 创建了一个新对象(不同的引用),Vue 会检测到变化。
    • 这会触发 @Watch('value'),从而调用 getProducts()

验证 add 模式下 getProducts() 是否触发

  1. 父组件行为

    • handleAdd() 被调用时(用户点击“登记”按钮),aveForm 被赋值为新空对象。
    • <ave-form>value 从旧的 {} 变为新的 {},触发 Watcher。
  2. 子组件反应

    • @Watch('value') 检测到 value 引用变化,执行 watchValue
    • this.getProducts() 被调用。
结论:

add 模式下,当用户点击“登记”按钮调用 handleAdd() 时,getProducts() 会被触发,因为 aveForm 的重新赋值导致 value 的引用发生变化。


检查父组件传入 value 的完整情况

让我们进一步确认父组件中 aveForm 的其他使用情况,确保没有遗漏:

  1. 初始值

    public aveForm: any = {};
    
    • 默认是一个空对象。
  2. 其他修改 aveForm 的地方

    • onEdit(row)
      public async onEdit(row: any) {this.aveForm = Object.assign({}, row);this.operateType = 'edit';this.aveFormVis = true;
      }
      
      • edit 模式下,aveForm 被赋值为表格行的副本。
    • handleView(row)
      public async handleView(row: any) {this.aveForm = { ...row };this.operateType = 'view';this.aveFormVis = true;
      }
      
      • view 模式下,aveForm 被赋值为表格行的副本。
    • onOpenStatus(row)
      public onOpenStatus(row: any) {this.aveForm = { ...row, cooperateStatus: row.cooperateStatus || 0, value: row.value || 0 };this.operateType = 'edit';this.cstatusVisible = true;
      }
      
      • 涉及其他状态,但不直接影响 <ave-form> 的主逻辑。
  3. add 模式的特殊性

    • 只有 handleAdd() 是明确为 add 模式准备的,且 aveForm 被设置为 {}
    • 对比 editviewadd 模式下 aveForm 是空的,而其他模式会传入已有数据。

如何明确知道父组件传入的 value

按照你之前的提问,我提供具体步骤验证 value 的传入情况:

  1. 在子组件中添加日志
    修改 ave-form.vue

    @Watch('value')
    watchValue(v: any) {console.log('add 模式下 value:', v, 'operateType:', this.operateType);this.$nextTick(() => {this.getProducts();const formData = { ...v, /* ... */ };this.form = formData;});
    }mounted() {console.log('组件挂载时 value:', this.value, 'operateType:', this.operateType);
    }
    
    • 点击“登记”按钮后,观察控制台:
      • 如果输出 add 模式下 value: {} operateType: add,确认 value 是空对象,且 getProducts() 被调用。
  2. 在父组件中添加日志
    修改 handleAdd()

    public handleAdd() {this.aveForm = Object.assign({}, {});console.log('传入 ave-form 的 value:', this.aveForm);this.aveFormVis = true;this.operateType = 'add';
    }
    
    • 输出:传入 ave-form 的 value: {}
  3. 使用 Vue Devtools

    • 打开浏览器开发者工具,切换到 Vue 面板。
    • 找到 <ave-form>,检查 Props 中的 value
      • add 模式下,应该是 {}

最终回答

  • 父组件传入 value 的情况
    • add 模式下,父组件通过 handleAdd()aveForm 设置为一个新的空对象 {},并传递给 <ave-form>value
  • 是否触发 getProducts()
    • 会触发,因为 aveForm 从旧的 {} 变为新的 {}(引用变化),触发了 @Watch('value')
  • 验证方法
    • 在子组件用 console.log 检查 valueoperateType
    • 在父组件打印 aveForm
    • 用 Vue Devtools 查看 <ave-form> 的实时 Props。

在这里插入图片描述

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

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

相关文章

第十四届蓝桥杯Scratch11月stema选拔赛真题——小猫照镜子

编程实现&#xff1a; 小猫照镜子。(背景非源素材) 具体要求&#xff1a; 1). 运行程序&#xff0c;角色、背景如图所示&#xff1b; 完整题目可点击下方链接查看&#xff0c;支持在线编程~ 小猫照镜子_scratch_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/s…

React + TypeScript 实现数据库逆向生成数据模型指南

React TypeScript 实现数据库逆向生成数据模型全栈指南 引言&#xff1a;逆向工程在现代开发中的价值 在微服务架构和快速迭代的背景下&#xff0c;数据库逆向生成数据模型已成为提升开发效率的核心技术。传统手动编写模型的方式存在模式同步延迟和类型安全缺失两大痛点。本文…

Android Audio实战——音频相关基础概念(附)

Android Audio 开发其实就是媒体源数字化的过程,通过将声波波形信号通过 ADC 转换成计算机支持的二进制的过程叫做音频采样 (Audio Sampling)。采样 (Sampling) 的核心是把连续的模拟信号转换成离散的数字信号。 一、声音的属性 1、响度 (Loudness) 响度是指人类可以感知到的…

小程序类目调整汇总公告

各位小程序开发者&#xff1a; 为进一步加强平台的规范管理&#xff0c;优化开发者类目选择体验&#xff0c;现对以下类目进行调整&#xff0c;请各位开发者知悉。 类目新增 非个人主体 #【交通服务-国际客运】 现资质要求 &#xff08;2选1&#xff09;&#xff1a; 1…

python的列表和元组别再傻傻分不清啦

目录 什么是下标&#xff1a; 正数索引&#xff1a;正数索引从左到右&#xff0c;从 0 开始。 负数索引&#xff1a;负数索引从右到左&#xff0c;从 -1 开始。 切片&#xff08;slice&#xff09;&#xff1a;除了单个元素&#xff0c;Python还支持通过切片访问序列的子集。…

dubbo转http方式调用

业务背景&#xff1a;在当前项目下&#xff0c;所有前端请求均通过外层网关转发到后端这边的dubbo服务&#xff0c;现计划去掉网关层&#xff0c;由前端直接http调用后端dubbo。 解决方案&#xff1a;在前端调用方式不变的前提下&#xff0c;后端服务新建controller层&#xf…

OpenHarmony构建系统实践-跨部件引用

上一篇通过gn构建系统利用部件构建了可执行程序、动态库和配置文件&#xff0c;以及部件内的引用&#xff0c;本篇通过实现跨部件的模块引用&#xff0c;通过实现部件间的使用方法&#xff0c;以此来达到复用三方部件和模块库的目的。 本节以实现两个自定义的部件为例&#xff…

在 compare-form.vue 中添加 compareDate 隐藏字段,并在提交时自动填入当前时间

在 compare-form.vue 中添加 compareDate 隐藏字段&#xff0c;并在提交时自动填入当前时间。 提交表单时存入的对象是FakeRegistration&#xff0c;这个对象里面有compareDate字段&#xff0c;刚好表格查询的对象也是FakeRegistration&#xff0c;所以表格展示的时间就是刚才…

Windows 11【1001问】如何安装Windows 11

紧接上篇内容&#xff0c;本文详细介绍了从准备工作到具体安装步骤的完整流程&#xff0c;帮助用户顺利完成Windows 11系统的安装。内容涵盖了ISO镜像文件的下载与校验、启动U盘的制作、硬件兼容性检查&#xff0c;以及BIOS/UEFI设置和系统安装过程中的关键步骤。通过逐步指导&…

Chromedriver与Chrome版本映射表

‌Chromedriver与Chrome版本映射表‌如下&#xff1a; ‌Chrome 71-73版本对应Chromedriver 2.46‌‌Chrome 70-72版本对应Chromedriver 2.45‌‌Chrome 69-71版本对应Chromedriver 2.44‌‌Chrome 68-70版本对应Chromedriver 2.43‌‌Chrome 67-69版本对应Chromedriver 2.42‌…

LSM-Tree (日志结构合并树)

LSM-Tree&#xff08;日志结构合并树&#xff09;是一种高效处理写操作的存储结构&#xff0c;广泛应用于NoSQL数据库如LevelDB和RocksDB。其核心思想是将随机写入转换为顺序写入&#xff0c;提升吞吐量。以下是其原理及Java实现示例&#xff1a; ### **LSM-Tree 原理** 1. **…

【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)

《API Testing and Development with Postman》最新第二版封面 文章目录 最新版《Postman 接口测试与开发实战》示例 API 项目本地部署保姆级搭建教程1 前言2 准备工作3 具体部署3.1 将项目 Fork 到自己名下3.2 创建虚拟环境并安装依赖3.3 初始运行与项目调试 4 示例项目的用法…

3-提前结束训练

一、核心类 class EarlyStopping:# YOLOv5 simple early stopperdef __init__(self, patience30):self.best_fitness 0.0 # i.e. mAPself.best_epoch 0self.patience patience or float(inf) # epochs to wait after fitness stops improving to stopself.possible_stop …

若依 ruoyi-vue 根据角色切换路由菜单权限 SAAS

后端根据角色查询相应的菜单&#xff08;角色对应管理的系统&#xff09; /*** 获取路由信息根据角色&#xff08;系统类型&#xff09;** return 路由信息*/GetMapping("getRoutersBySystemType")public AjaxResult getRoutersBySystemType(String systemType) {Lon…

2024最新版鸿蒙纯血原生应用开发教程文档丨学习ArkTS语言-基本语法

ArkTS是HarmonyOS的主要应用开发语言&#xff0c;在TypeScript基础上进行了扩展&#xff0c;保留了其基本风格&#xff0c;并通过增强静态检查和分析来提高程序的稳定性和性能。本教程将帮助开发者掌握ArkTS的核心功能、语法及最佳实践&#xff0c;以便高效地构建高性能移动应用…

使用插件 `vue2-water-marker`添加全局水印

使用插件 vue2-water-marker添加全局水印 效果图 1、安装插件 npm install vue2-water-marker --save2、全局注册 // main.js import Vue from vue import Vue2WaterMarker from vue2-water-markerVue.use(Vue2WaterMarker)3、在组件中使用 <template><div id&q…

docker安装etcd:docker离线安装etcd、docker在线安装etcd、etcd镜像下载、etcd配置详解、etcd常用命令、安装常见问题总结

官方网站 官方网址&#xff1a;etcd 二进制包下载&#xff1a;Install | etcd GitHub社区项目&#xff1a;etcd-io GitHub GitHub社区项目版本历史&#xff1a;Releases etcd-io/etcd GitHub 一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令…

探索浮点数在内存中的存储(附带快速计算补码转十进制)

目录 一、浮点数在内存中的存储 1、常见的浮点数&#xff1a; 2、浮点数存储规则&#xff1a; 3、内存中无法精确存储&#xff1a; 4、移码与指数位E&#xff1a; 5、指数E的三种情况&#xff1a; 二、快速计算补码转十进制 1、第一种方法讨论&#xff1a; 2、第二种方…

第25周JavaSpringboot实战-电商项目 4.商品分类管理

商品分类模块开发笔记 模块功能概述 实现分类数据的 增删改查 功能核心难点&#xff1a; 分类的父子级目录结构递归实现多级分类查找列表展示顺序控制&#xff08;从父级向子级递归&#xff09; 接口说明 后台接口 1. 添加分类 请求地址: /admin/category/add 请求方法: …

【星云 Orbit-F4 开发板】03g. 按键玩法七:矩阵键盘单个触发

【星云 Orbit-F4 开发板】03g. 按键玩法七&#xff1a;矩阵键盘单个触发 引言 矩阵键盘是一种常见的输入设备&#xff0c;广泛应用于各种嵌入式系统中。通过矩阵键盘&#xff0c;用户可以通过按键输入字符或控制信号。本文将详细介绍如何使用STM32F407的GPIO引脚实现矩阵键盘的…