vue3探索——组件通信之v-model父子组件数据同步
背景
再很多场景中,我们可能想在子组件中修改父组件的数据,但事实上,vue不推荐我们这么做,因为数据的修改不容易溯源。
Vue2写法
在vue2中,我们使用.sync修饰符+自定义事件'update:xxx',来使父子组件数据同步。
// 父组件
<template>
<div>
<h2>我是父组件,我有{{ money }}¥</h2>
<hr>
<!-- 这里使用.sync修饰符,使**子组件pmoney**与**父组件money**同步 -->
<Son :pmoney.sync="money" />
</div>
</template>
<script>
import Son from "./son.vue";
export default {
components: {
Son,
},
data() {
return {
money: 1000 // 父组件数据
};
},
};
</script>
// 子组件
<template>
<div>
<h2>我是子组件,我爹有{{ pmoney }}¥</h2>
<!-- 触发**update:pmoney**这个自定义事件,事件参数就是要更改的值 -->
<button @click="$emit('update:pmoney', pmoney - 100)">用了100¥</button>
</div>
</template>
<script>
export default {
props: {
// 定义父组件传进来的数据
pmoney: {
type: Number,
default: 0
},
},
};
</script>
这里不作过多说明,有需要请自行了解。
Vue3写法
vue3的写法与vue2基本一致。最大的区别就是,使用v-model代替.sync修饰符。
// 父组件
<template>
<div>
<!-- 父组件的数据 -->
<h2>我是父组件,我有{{ money }}¥</h2>
<hr>
<!-- 使用子组件 -->
<!-- 这里v-model的作用相当于vue2的.sync修饰符 -->
<Son v-model:pmoney="money" />
<!-- 也可以绑定多组数据 -->
<!-- <Son v-model:pmoney1="money" v-model:pmoney2="money" /> -->
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
// 引入子组件
import Son from './son.vue';
// 父组件的数据
const money = ref(1000);
</script>
// 子组件
<template>
<div>
<!-- 使用props中的数据 -->
<h3>我是子组件,我爹有{{ pmoney }}¥</h3>
<!-- 这里通过自定义事件,向父组件传递变更后的值,由父组件监听事件并修改数据 -->
<button @click="emit('update:pmoney', pmoney - 100)">我使用了100¥</button>
</div>
</template>
<script setup lang="ts">
// 定义props,接收父组件的数据
defineProps(['pmoney']);
// 定义emits,用于触发父组件的事件
const emit = defineEmits(['update:pmoney']);
</script>
原理剖析
下面的v-model:pmoney实际是v-bind:pmoney 属性绑定和@update:pmoney 事件绑定的语法糖。
这里事件绑定的@update:是固定的,这就是子组件的自定义事件要加update: 前缀的原因。
<Son v-model:pmoney="money" />
相当于
<Son :pmoney="money" @update:pmoney="money = $event" />
$event:子组件通过自定义事件传给父组件的值。
父子组件数据同步的本质
本质是子组件通过自定义事件向父组件传参数,子组件触发自定义事件并传值,父组件监听自定义事件并取值,同时修改原本的数据,因为v-bind数据绑定,子组件数据也会更新到最新的值。
vue3探索——组件通信之v-model父子组件数据同步的更多相关文章
- vue第八单元(组件通信 子父,父子组件通信 自定义事件 事件修饰符 v-model props验证 )
第八单元(组件通信 子父,父子组件通信 自定义事件 事件修饰符 v-model props验证 ) #课程目标 掌握使用props让父组件给子组件传参(重点) 掌握props属性的使用以及prop验证 ...
- 第四节:Vue表单标签和组件的基本用法,父子组件间的通信
vue表单标签和组件的基本用法,父子组件间的通信,直接看例子吧. <!DOCTYPE html> <html> <head> <meta charset=&q ...
- vue组件定义方式,vue父子组件间的传值
vue组件定义方式,vue父子组件间的传值 <!DOCTYPE html> <html lang="zh-cn"> <head> <met ...
- vue 自定义组件 v-model双向绑定、 父子组件同步通信
父子组件通信,都是单项的,很多时候需要双向通信.方法如下: 1.父组件使用:msg.sync="aa" 子组件使用$emit('update:msg', 'msg改变后的值xxx ...
- vue 自定义组件 v-model双向绑定、 父子组件同步通信【转】
父子组件通信,都是单项的,很多时候需要双向通信.方法如下: 1.父组件使用:msg.sync="aa" 子组件使用$emit('update:msg', 'msg改变后的值xxx ...
- 【VUE】7.组件通信(二)子组件修改父组件
1. 前提&知识点 1./components/Father.vue 是父组件, Son.vue 是子组件 2.子组件修改父组件 emit 2. 组件通信 1. 首先对子组件绑定一个事件 ch ...
- 【VUE】6.组件通信(一)父组件向子组件传值
1. 前提&知识点 1./components/Father.vue 是父组件, Son.vue 是子组件 2.父组件像子组件通信 props 2.组件通信 1. 新增一个路由入口 /fath ...
- vue组件命名和传值 and 父子组件传值
https://www.cnblogs.com/lianxisheng/p/10907350.html
- angular组件共用服务打印日志父子组件传值2创建服务注入
- vue父子组件通信高级用法
vue项目的一大亮点就是组件化.使用组件可以极大地提高项目中代码的复用率,减少代码量.但是使用组件最大的难点就是父子组件之间的通信. 子通信父 父组件 <template> <div ...
随机推荐
- SpringBoot2.x 启动过程详解
spring 简化了java应用开发, 而springboot则简化了 spring应用的开发,用约定优于配置优于编码的方式快速构建spring对其他框架的整合. 官方文档 探究Hello,World ...
- C++ //count_if //按条件统计元素个数 //自定义和 内置
1 //按条件统计元素个数 2 //count_if 3 4 #include <iostream> 5 #include<string> 6 #include<vect ...
- 使用内网nginx代理rancher
需求: rancher 部署在 192.168.188.167服务器上 控制台访问地址 https://192.168.188.167:8443 在本地只有192.168.80.111有权限访问, 需 ...
- Alertmanager钉钉告警
一.部署alertmanager 1.1 创建目录 mkdir -p /deploy/app/alertmanager/config chmod -R 777 /deploy/app/alertman ...
- RabbitMQ 快速复习
目录 RabbitMQ学习笔记 1.消息队列概述 1.1 为什么学习消息队列 1.2 什么是消息中间件 1.3 消息队列应用场景 1.3.1 异步处理 1.3.2 解耦服务 1.3.3 流量削峰 1. ...
- centos python3虚拟环境
为什么需要虚拟环境? 在使用 Python 语言时,通过 pip(pip3)来安装第三方包,但是由于 pip 的特性,系统中只能安装每个包的一个版本.但是在实际项目开发中,不同项目可能需要第三方包的不 ...
- [VueJsDev] 日志 - 更新日志
[VueJsDev] 目录列表 https://www.cnblogs.com/pengchenggang/p/17037320.html 更新日志 ::: details 目录 目录 更新日志 Lo ...
- Centos安装常见软件
一.vscode sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e &qu ...
- 回声消除AEC(Acoustic Echo Cancellation)概括介绍及基本原理分析
回声消除的基本概念 回音消除(Acoustic Echo Cancelling)是透过音波干扰方式消除麦克风与喇叭因空气产生回受路径(feedback path)而产生的杂音.通俗一点来说,回声消 ...
- day22--Java集合05
Java集合05 11.HashSet课堂练习 11.1课堂练习1 定义一个Employee类,该类包括:private成员属性name,age 要求: 创建3个Employee对象放入HashSet ...