vue中.sync修饰符与$emit(update:xxx)双向数据绑定

news2025/1/23 10:30:27

文章目录

  • 一、单向数据流
  • 二、`props`父子传值
    • 2.1、父组件
    • 2.2、子组件
    • 2.3、优缺点
      • 2.3.1、优点
      • 2.3.2、缺点
  • 三、`.sync`修饰符双向绑定
    • 3.1、父组件
    • 3.2、子组件
    • 3.3、优缺点
      • 3.3.1、优点
      • 3.3.2、缺点
    • 3.4、[文档](https://v2.cn.vuejs.org/v2/guide/components-custom-events.html#sync-%E4%BF%AE%E9%A5%B0%E7%AC%A6)
  • 四、最后

一、单向数据流

所有的 props 都遵循着单向绑定原则,props 因父组件的更新而变化,自然地将新的状态向下流往子组件,而不会逆向传递。这避免了子组件意外修改父组件的状态的情况,不然应用的数据流将很容易变得混乱而难以理解。另外,每次父组件更新后,所有的子组件中的 props 都会被更新到最新值,这意味着你不应该在子组件中去更改一个 prop

正常的父子组件传值及修改值,需要props传递属性到子组件,然后需要子组件触发自定义事件到父组件去改值。

二、props父子传值

2.1、父组件

  1. 在父组件中定义数据及传递给子组件
  2. 接收自定义事件,在自定义事件中修改值
<template>
	<div>
		<child :title="title" @change="changeTitle"></child>
	</div>
</template>
<script>
	export default {
		data() {
			return {
				title:"old title"
			}
		},
        methods: {
            // 最鸡肋的就是这个环节
            changeTitle(e) {
                this.title = e // new title
            }
        }
	}
</script>

2.2、子组件

  1. 子组件中接收数据,定义触发修改值的方法及$emit触发自定义事件携带参数到父组件
<template>
	<div>
		<div @click="changeTitle">{{title}}</div>
	</div>
</template>
<script>
	export default {
		props: {
			title: {
				default: "old title"
			},
		},
		methods: {
			changeTitle(){
				// 触发一个更新事件
				this.$emit('change:title',"new title")
			}
		}
	}
</script>

2.3、优缺点

2.3.1、优点

明确的数据流props通过显式地传递数据,使得数据的来源和使用更加清晰明确。
数据单向流动props的数据只能由父组件向子组件传递,避免了数据的混乱和不可预测性。
较好的可维护性props作为接口定义,可以提高组件的可维护性和可复用性。

2.3.2、缺点

相对繁琐:对于较为复杂的数据传递和组件间的通信,需要通过定义多个props,增加了代码的复杂度。
需要额外的事件机制:子组件需要通过事件或方法通知父组件进行数据更新,增加了一定的开发成本和复杂度。

三、.sync修饰符双向绑定

3.1、父组件

<template>
	<div>
		<child :title.sync="title" />
	</div>
</template>
<script>
	export default {
		data() {
			return {
				title:"old title"
			}
		}
	}
</script>

3.2、子组件

<template>
	<div>
		<div @click="changeTitle">{{title}}</div>
	</div>
</template>
<script>
	export default {
		props: {
			title: {
				default: "old title"
			},
		},
		methods: {
			changeTitle(){
				// 触发一个更新事件
				this.$emit('update:title',"new title")
			}
		}
	}
</script>

3.3、优缺点

3.3.1、优点

对比props父子传值及.sync修饰符双向绑定,最直观的感受就是代码简化了
.sync 修饰符实质就是父组件监听子组件更新某个props的请求的缩写语法,一种语法糖。

简洁的语法:使用.sync修饰符可以简洁地实现父子组件的双向数据绑定。
方便的数据更新:子组件可以直接修改父组件的数据,子组件的变化会直接影响到父组件中对应的数据。

:title.sync="title"
// 写法等同于
:title="title"
@update:title="title = $event"

3.3.2、缺点

数据绑定不够明确:由于子组件可以直接修改父组件的数据,可能导致数据变得不可预测,增加了调试和维护的难度。
双向绑定可能带来性能问题:频繁的数据变动可能导致性能问题,需要合理控制双向绑定的使用。

3.4、文档

在这里插入图片描述

四、最后

本人每篇文章都是一字一句码出来,希望大佬们多提提意见。顺手来个三连击,点赞👍收藏💖关注✨。创作不易,给我打打气,加加油☕

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

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

相关文章

【快速见刊|投稿优惠】2024年机电一体与自动化技术国际学术会议(IACMAT 2024)

2024年机电一体与自动化技术国际学术会议(IACMAT 2024) 2024 International Academic Conference on Mechatronics and Automation Technology(IACMAT 2024) 一【会议简介】 2024年机电一体与自动化技术国际学术会议(IACMAT 2024)即将召开&#xff0c;它以“机电一体&#xff0…

利用Linux中的iptables进行网络代理配置

作为资深爬虫技术员&#xff0c;爬虫需要代理IP池介入这是众所周知的。今天我将用我毕生所学&#xff0c;谈谈linux中使用iptables工具来进行网络配置&#xff0c;并通过linux系统创建属于自己的ip库池&#xff0c;如有错误望各位大佬指正。 我们知道&#xff0c;在Linux中&am…

Windows10中在Visual Studio2017中VC++项目安装使用GoogleTest库

Windows10中在Visual Studio2017中VC项目安装使用GoogleTest库 在Windows10中VC程序中可以不用自己手动下载GoogleTest源代码&#xff0c;可以直接通过【项目】-> 【管理 NuGet 程序包】-> 【浏览】-> 搜索 googletest&#xff0c; 找到Microsoft.googletest.v140.wi…

音乐播放器Swinsian mac功能介绍

Swinsian mac是一款音乐播放器&#xff0c;它的特点是轻量级、快速、易用。Swinsian支持多种音频格式&#xff0c;包括MP3、AAC、FLAC、WAV等。它还具有iTunes集成功能&#xff0c;可以自动导入iTunes音乐库中的音乐&#xff0c;并支持智能播放列表、标签编辑、自定义快捷键等功…

#HarmonyOS:软件安装window和mac预览Hello World

Window软件地址 https://developer.harmonyos.com/cn/develop/deveco-studio#download 安装的建议 这个界面这样选&#xff0c;其他界面全部按照默认路径往下走&#xff01;&#xff01;&#xff01; 等待安装… 安装环境错误处理 一般就是本地node配置异常导致&#xff…

FPGA falsh相关知识总结

1.存储容量是128M/8 Mb16MB 2.有256个sector扇区*每个扇区64KB16MB 3.一页256Byte 4.页编程地址0256 5&#xff1a;在调试SPI时序的时候一定注意&#xff0c;miso和mosi两个管脚只要没发送数据就一定要悬空&#xff08;处于高组态&#xff09;&#xff0c;不然指令会通过两…

Lesson 08 string类 (中)

C&#xff1a;渴望力量吗&#xff0c;少年&#xff1f; 文章目录 二、string类的介绍与使用2. 使用&#xff08;5&#xff09;string类对象的修改操作 三、拷贝1. 引入2. 浅拷贝3. 深拷贝 总结 二、string类的介绍与使用 2. 使用 &#xff08;5&#xff09;string类对象的修改…

第一百八十五回 如何禁止页面跟随手机自动旋转

文章目录 1. 概念介绍2. 使用方法2.1 全面禁止2.2 局部禁止3. 示例代码4. 内容总结我们在上一章回中介绍了"如何自定义Radio组件"相关的内容,本章回中将介绍 如何禁止页面随手机自动旋转.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在手机默认设置下,手机…

CentOS7.5搭建Hadoop-3.3.6集群的详细操作流程-实操版本

一、准备工作 1、安装 VMware&#xff0c;已安装的&#xff0c;跳过此步骤即可 官方正版VMware下载&#xff08;16 pro&#xff09;&#xff1a;https://www.aliyundrive.com/s/wF66w8kW9ac 安装&#xff1a;选一下安装地址&#xff0c;一直下一步即可。&#xff08;可能会要…

QListWidget中自定义widget大小自适应

背景&#xff1a; QListWidget中的item&#xff0c;可以添加自定义的widget。 但是怎么去调整widget的大小呢&#xff1f; 参考&#xff1a;QT QListWidget的添加与删除&#xff0c;滚动条显示或隐藏&#xff0c;判断是否滑到顶部或底部&#xff0c;并使QListWidgetItem自适…

.Net 8 Blazor下 Auto交互渲染模式试用

一、环境 C:\Users\zhuji>dotnet --version 8.0.100C:\Users\zhuji>dotnet --list-sdks 5.0.403 [C:\Program Files\dotnet\sdk] 6.0.404 [C:\Program Files\dotnet\sdk] 8.0.100 [C:\Program Files\dotnet\sdk] Microsoft Visual Studio Enterprise 2022 (64 位) - Cu…

SQL Sever 基础知识 - 数据查询

SQL Sever 基础知识 - 一、查询数据 一、查询数据第1节 基本 SQL Server 语句SELECT第2节 SELECT语句示例2.1 SELECT - 检索表示例的某些列2.2 SELECT - 检索表的所有列2.3 SELECT - 对结果集进行筛选2.4 SELECT - 对结果集进行排序2.5 SELECT - 对结果集进行分组2.5 SELECT - …

数学建模-基于集成学习的共享单车异常检测的研究

基于集成学习的共享单车异常检测的研究 整体求解过程概述(摘要) 近年来&#xff0c;共享单车的快速发展在方便了人们出行的同时&#xff0c;也对城市交通产生了一定的负面影响&#xff0c;其主要原因为单车资源配置的不合理。本文通过建立单车租赁数量的预测模型和异常检测模型…

IDEA中springboot 提示 java: 找不到符号 符号: 变量 log

在以下位置加上该配置"-Djps.track.ap.dependenciesfalse" 然后重新启动项目&#xff0c;到此问题解决&#xff01;&#xff01;&#xff01;

软件工程 课后题 选择 查缺补漏

在一张状态图中只能有一个初态&#xff0c;而终态则可以没有&#xff0c;也可以有多个 所有的对象可以成为各种对象类&#xff0c;每个对象类都定义了一组 方法 通过执行对象的操作可以改变对象的属性&#xff0c;但它必须经过 消息 的传递 UML应用于 基于对象的面向对象的方…

js事件流与事件委托/事件代理

1 事件流 事件流分为两步&#xff0c;一是捕获&#xff0c;二是冒泡 1.1 捕获概念 捕获就是从最高层一层一层往下找到最内部的节点 1.2 冒泡概念 捕获到最小节点后&#xff0c;一层一层往上返回&#xff0c;像是气泡从最底部往上冒一样&#xff0c;由于水深不同压强不同&…

Git分支批量清理利器:自定义命令行插件实战

说在前面 不知道大家平时工作的时候会不会需要经常新建git分支来开发新需求呢&#xff1f;在我这边工作的时候&#xff0c;需求都是以issue的形式来进行开发&#xff0c;每个issue新建一个关联的分支来进行开发&#xff0c;这样可以通过issue看到一个需求完整的开发记录&#x…

Mybatis 的简单运用介绍

Mybatis 用于操作数据库 操作数据库肯定需要: 1.SQL语句 2.数据库对象和 java 对象的映射 接下来我们看看怎么使用 Mybatis 我们先搞一些数据库内容 然后将其这些内容和Java对象进行映射 再创建一个类实现 select * from 再写一个类证明上述代码是否可以实现 别忘了在appli…

vue3+element-plus+vue-cropper实现裁剪图片上传

1.vue3element-plusvue-cropper实现裁剪图片 element-UI官网element-plus官网vue-croppervue3使用vue-cropper安装&#xff1a;npm install vue-croppernext 2.vue-cropper插件&#xff1a; <vue-cropper :img"option.img" /><script setup>import {reac…

组合(回溯算法)

77. 组合 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 样例输入 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],…