关于Vue的子组件改变父组件传来的值
一、组件直接传值
大家都知道父子组件传值的方案,有以下几个,不再详细敖述
Props:父组件向子组件传递数据
$emit:子组件通过自定义事件向父组件传递数据
.sync修饰符:一个方便且强大的工具,可以简化父子组件之间的双向数据绑定,用于创建双向绑定prop的修饰符,它允许子组件更新父组件的prop值,实现父子组件之间的双向数据同步(如果不想使用事件),
.sync修饰符的工作原理主要基于Vue.js的事件机制和prop传递机制Vuex进行状态管理:应用提供了一种高效、清晰的状态管理方案。通过集中式存储管理、可预测的状态变化、组件间的解耦以及方便的调试工具等特性,Vuex极大地简化了应用程序的状态管理。
provide/inject:是Vue.js中一种强大的机制,用于实现跨组件的数据共享和方法传递。它们能够有效地避免繁琐的props传递,提升组件间通信的灵活性和代码的可维护性。然而,在使用时需要注意响应性问题、命名冲突以及性能开销等细节。
Bus事件:Bus事件适用于简单的场景或临时解决方案,如果在组件销毁后没有移除事件监听器,可能会导致内存泄漏。因此,在组件销毁之前,应该使用
$off方法来移除事件监听器。refs或parent/$children访问组件实例,父组件可以通过$refs直接访问子组件的数据或方法;父组件可以通过children访问子组件,子组件可以通过parent访问父组件,从而实现父子组件之间的数据传递。但这种方式会破坏组件的封装性和独立性,因此应尽量避免过多使用。
二、 子组件改变父组件的值
子组件通过自定义事件向父组件传递数据,来让父组件改变值,是正规使用,,其中.sync修饰符同步父组件值,是综合版本,不过有以下两种情况是不被推荐,尤其直接改变非对象属性
- 子组件直接改变了父组件里面的对象:因为是对象里面的属性,没有直接触发该对象属性的 setter,只是在修改对象内部的引用,而这个内部引用并没有被 Vue 的响应式系统所追踪。因此,从技术上讲,Vue 不知道这个内部属性已经被修改,也就不会触发视图更新,也就不会报错。(不会报错)
- 直接修改父组件非对象属性就会直接触发 setter引发报错Avoid mutating a prop...(报错)
父组件
<template><div><child-component :parentMessage="parentMessage" :form="form" @setParentMessage="setParentMessage" :form.sync="form"></child-component></div>
</template><script>
export default {data() {return {parentMessage: 'Hello from parent!',form:{user:'默认'}};},methods: {setParentMessage(msg) {this.parentMessage = msg//推荐}}
}
</script>
子组件
<template><div><p @click="sendUpdate">{{ parentMessage }}</p></div>
</template><script>
export default {props: {parentMessage: String,form: Object},methods: {sendUpdate(data) {this.form.us='不报错'//只是在修改对象内部的引用,而这个内部引用并没有被 Vue 的响应式系统所追踪。因此,从技术上讲,Vue 不知道这个内部属性已经被修改,也就不会触发视图更新,也就不会报错。this.parentMessage='报错'//Avoid mutating a prop...//推荐:子组件通过自定义事件向父组件传递数据,来让父组件改变值,是正规使用this.$emit('setParentMessage', '自定义事件传递数据');//推荐:.sync修饰符同步父组件值const form = { ...this.form };form.us = '.sync修饰符同步父组件值';this.$emit('update:form', form);//当然这样做可能会使代码变得难以理解和维护,特别是在大型应用程序中。//更好的做法是遵循Vue的最佳实践,即不要直接修改prop。this.form.us = '.sync修饰符同步父组件值';this.$emit('update:form', this.form);}}
}
</script>
相关文章:
关于Vue的子组件改变父组件传来的值
一、组件直接传值 大家都知道父子组件传值的方案,有以下几个,不再详细敖述 Props:父组件向子组件传递数据 $emit:子组件通过自定义事件向父组件传递数据 .sync修饰符:一个方便且强大的工具,可以简化父子组…...
jvm排查问题-实践追踪问题 与思路--堆内堆外内存泄漏排查方针
概述 排查问题的一般思路是:现象 ——> 直接原因 ——>根本原因。 从问题现象出发,可以分为 应用逻辑问题、资源使用问题、虚拟机异常: 应用逻辑可能导致报错增加、死锁、程序退出等;资源问题主要集中在CPU上升和内存上升(OOM Kill);虚拟机问题通常包括GC问题、进…...
网络层协议--ip协议
目录 引言 IP协议 协议头格式 16位标识与3位标志与13位片偏移讲解 网段划分(重要) DHCP技术 CIDR技术 特殊的IP地址 广播主机 IP地址的数量限制 私有IP地址和公网IP地址 路由:在复杂的网络结构中, 找出一条通往终点的路线 简单认识路由器 路由表生成算…...
【总结整理】 神经网络与深度学习 邱锡鹏 课后习题答案 扩展阅读链接
本文主要针对神经网络神经网络邱锡鹏 2~8 章的课后习题进行理解的过程中,搜索到的讲的会比较透彻的链接整理。适合有一定基础但是想了解更细的人阅读。 主要参考书籍 首先是本书pdf可在神经网络与深度学习获取; 主要参考的课后习题答案为nndl/solution…...
使用 Three.js 创建一个 3D 人形机器人仿真系统
引言 在这篇文章中,我们将探讨如何使用 Three.js 创建一个简单但有趣的 3D 人形机器人仿真系统。这个机器人可以通过键盘控制进行行走和转向,并具有基本的动画效果。 技术栈 HTML5Three.jsJavaScript 实现步骤 1. 基础设置 首先,我们需要…...
图像修复和编辑大一统 | 腾讯北大等联合提出BrushEdit:BrushNet进阶版来了
文章链接:https://arxiv.org/pdf/2412.10316 项目链接:https://liyaowei-stu.github.io/project/BrushEdit 亮点直击 提出了BrushEdit,这是先前BrushNet模型的高级迭代版本。BrushEdit通过开创基于修复(inpainting)的图…...
【hackmyvm】Adroit靶机wp
tags: HMVjava反编译SQL注入 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集3. java反编译4. sql注入5. 解密密码6. 提权 靶机链接 https://hackmyvm.eu/machines/machine.php?vmAdroit 作者 alienum 难度 ⭐️⭐️⭐️⭐️️ 2. 信息收集 ┌──(root㉿kali)-[~] └…...
【Python运维】自动化备份与恢复系统的实现:Python脚本实战
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着信息化进程的加速,数据的重要性日益增加,数据丢失的风险也随之增加。为了保证数据安全,定期备份和及时恢复数据是必不可少的操作。本…...
Goland 安装与使用
GoLand安装 官方网址: JetBrains GoLand:不只是 Go IDE 1. 进入官网,点击下载: 2. 如下图一步步安装 3. 如下图一步步安装...
vue2 升级为 vite 打包
VUE2 中使用 Webpack 打包、开发,每次打包时间太久,尤其是在开发的过程中,本文记录一下 VUE2 升级Vite 步骤。 安装 Vue2 Vite 依赖 dev 依赖 vitejs/plugin-vue2": "^2.3.3 vitejs/plugin-vue2-jsx": "^1.1.1 vite&…...
FreeSwitch中启用WebRTC
在FreeSwitch中启用WebRTC需要进行一系列配置。以下是详细的步骤: 1. 安装必要的依赖: 确保安装了支持WebRTC的依赖库,如libsrtp。 2. 配置SIP Profile: 编辑 conf/sip_profiles/internal.xml 文件,添加或修改以下内…...
R语言的数据类型
标题:《探索R语言数据类型的奥秘》 引言: 在统计学和数据分析的世界里,R语言无疑是一颗璀璨的明星。它以其强大的数据处理能力和丰富的图形展示功能而受到广泛欢迎。然而,要熟练掌握并高效使用R语言,深入了解其数据类…...
基于UNET的图像分类
网络架构 UNet网络是一种革命性的图像分割架构,在图像分类任务中同样展现出卓越的性能。其独特的设计巧妙地平衡了全局信息捕捉和精细细节保留的需求,特别适合处理需要高度精确定位的任务。 UNet的核心设计理念体现在其 对称的编码器-解码器结构 中。这种结构不仅实现了高效…...
css文字折行以及双端对齐实现方式
使用flex布局后,文字超出容器部分不会自动折行了。实现代码如下: <el-row><el-col :span"24"><span class"label">姓名</span><span class"content">{{name}}</span></el-col>…...
华为云语音交互SIS的使用案例(文字转语音-详细教程)
文章目录 题记一 、语音交互服务(Speech Interaction Service,简称SIS)二、功能介绍1、实时语音识别2、一句话识别3、录音文件识别4、语音合成 三、约束与限制四、使用1、API2、SDK 五、项目集成1、引入pom依赖2、初始化 Client1)…...
设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)
前言: 设计一个完整的 监控摄像头物联网 IoT 平台 涉及 视频直播和点播、WebRTC 和 文件存储模块,可以分为以下几个主要部分:摄像头设备、服务端处理、Web 前端、视频流存储和回放。以下是结合这些技术的一个具体完整流程设计,涵盖…...
学习笔记(prism--视频【WPF-prism核心教程】)--待更新
《一》框架介绍 prism是一个用于WPF…和winUI中构建的松散耦合,可维护和可测试的应用程序框架。帮助WPF开发人员以简化编写,维护和扩展来设计应用程序。 优点:遵循特定的约定,可自动将view/ViewModel建立DataContext的关系&#…...
Kafka无锁设计
前言 在分布式消息队列系统中,Kafka 的无锁设计是其高吞吐量和高并发的核心优势之一。通过避免锁的竞争,Kafka 能够在高并发和大规模的生产环境中保持高效的性能。为了更好地理解 Kafka 的无锁设计,我们首先对比传统的队列模型,然后探讨 Kafka 如何通过无锁机制优化生产者…...
【GO基础学习】gin框架路由详解
文章目录 gin框架路由详解(1)go mod tidy(2)r : gin.Default()(3)r.GET()路由注册 (4)r.Run()路由匹配 总结 gin框架路由详解 先创建一个项目,编写一个简单的demo&#…...
GPIO+TIM(无PWM)实现呼吸灯功能
程序特点: 1、模块化,可快速移植,5分钟便可完成移植。 2、通过GPIO普通定时器,实现呼吸灯功能。 3、PWM周期为5ms,占空比调节时间为20ms,占空比为100等份,即呼吸灯从暗到亮需要20ms*1002s。 …...
【单片机】STM32的FSMC总线什么情况需要复用
FSMC是一种总线控制器,可以接SRAM、NOR Flash、NAND Flash、PC Card、PSRAM。FMC就是FSMC的升级版,多了一个SDRAM控制。FSMC总线中有分A总线(地址),D总线(数据)。在芯片引脚多的情况下A和D总线可…...
突破60帧束缚:原神高帧率解锁工具完全指南
突破60帧束缚:原神高帧率解锁工具完全指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否曾为《原神》的60帧限制而感到遗憾?当你的显示器支持144Hz甚至更…...
Windows 11硬件限制绕过终极指南:让旧电脑也能安装最新系统
Windows 11硬件限制绕过终极指南:让旧电脑也能安装最新系统 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...
3步搞定知识星球爬虫:让付费知识变成你的私人电子书库
3步搞定知识星球爬虫:让付费知识变成你的私人电子书库 【免费下载链接】zsxq-spider 爬取知识星球内容,并制作 PDF 电子书。 项目地址: https://gitcode.com/gh_mirrors/zs/zsxq-spider 你是否在知识星球上订阅了多个优质专栏,却苦于无…...
YimMenu:GTA V游戏增强与安全防护解决方案
YimMenu:GTA V游戏增强与安全防护解决方案 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu 在…...
cbindgen高级配置指南:自定义类型映射与导出规则详解
cbindgen高级配置指南:自定义类型映射与导出规则详解 【免费下载链接】cbindgen A project for generating C bindings from Rust code 项目地址: https://gitcode.com/gh_mirrors/cb/cbindgen cbindgen 是 Rust 生态系统中最强大的 C/C 绑定生成工具&#x…...
annotated_research_papers:AI研究者的终极论文宝库完全指南
annotated_research_papers:AI研究者的终极论文宝库完全指南 【免费下载链接】annotated_research_papers This repo contains annotated research papers that I found really good and useful 项目地址: https://gitcode.com/gh_mirrors/an/annotated_research_…...
AWPortrait-Z问题解决:图像模糊、速度慢?常见问题一键搞定
AWPortrait-Z问题解决:图像模糊、速度慢?常见问题一键搞定 1. 快速诊断:你的问题属于哪一类? 在使用AWPortrait-Z生成人像时,最常见的问题可以归纳为三类: 图像质量问题:模糊、失真、细节不足…...
终极指南:如何用BetterGI智能辅助工具彻底解放你的原神游戏体验
终极指南:如何用BetterGI智能辅助工具彻底解放你的原神游戏体验 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连…...
30 秒学会!手机隐藏数码技巧,超实用!打工人、学生党直接封神
家人们谁懂啊!每天手机不离手,结果 90% 的隐藏功能全在吃灰,简直亏到姥姥家!别再只会打电话、刷短视频了,这些30 秒就能上手的数码冷知识,实用到跺脚,学会直接变身玩机大神,效率直接…...
