当前位置: 首页 > news >正文

【vue3】组件通信

一、Vue3 组件通信和 Vue2 的区别:

● 移出事件总线,使用 mitt 代替。

● vuex 换成了 pinia 。

● 把 .sync 优化到了 v-model 里面了。

● 把 $listeners 所有的东西,合并到 $attrs 中了。

● $children 被砍掉了。

常见搭配形式:

二、【props】

概述: props 是使用频率最高的一种通信方式,常用与 :**父 ↔ 子**。

● 若 父传子:属性值是**非函数**。

● 若 子传父:属性值是**函数**。

父组件:

<template>
<div class="father">
<h3>父组件,</h3>
<h4>我的车:{{ car }}</h4>
<h4>儿子给的玩具:{{ toy }}</h4>
<Child :car="car" :getToy="getToy"/>
</div>
</template>
<script setup lang="ts" name="Father">
import Child from './Child.vue'
import { ref } from "vue";
// 数据
const car = ref('奔驰')
const toy = ref()
// 方法
function getToy(value:string){
toy.value = value
}
</script>

子组件

<template>
<div class="child">
<h3>子组件</h3>
<h4>我的玩具:{{ toy }}</h4>
<h4>父给我的车:{{ car }}</h4>
<button @click="getToy(toy)">玩具给父亲</button>
</div>
</template>
<script setup lang="ts" name="Child">
import { ref } from "vue";
const toy = ref('奥特曼')
defineProps(['car','getToy'])
</script>

三、【自定义事件】


1. 概述:自定义事件常用于:**子 => 父。**


2. 注意区分好:原生事件、自定义事件。


● 原生事件:
● 事件名是特定的( click 、 mosueenter 等等)
● 事件对象 $event : 是包含事件相关信息的对象( pageX 、 pageY 、 target 、 keyCode )


● 自定义事件:
● 事件名是任意名称
● 事件对象 $event : 是调用 emit 时所提供的数据,可以是任意类型!!!


示例:

<!--在父组件中,给子组件绑定自定义事件:-->
<Child @send-toy="toy = $event"/>
<!--注意区分原生事件与自定义事件中的$event-->
<button @click="toy = $event">测试</button>//子组件中,触发事件:
this.$emit('send-toy', 具体数据)

四、【v-model】


1. 概述:实现 父↔子 之间相互通信。
2. 前序知识 —— v-model 的本质

<!-- 使用v-model指令 -->
<input type="text" v-model="userName">
<!-- v-model的本质是下面这行代码 -->
<input
type="text"
:value="userName"
@input="userName =(<HTMLInputElement>$event.target).value"
>

3. 组件标签上的 v-model 的本质: :moldeValue + update:modelValue 事件。

<!-- 组件标签上使用v-model指令 -->
<AtguiguInput v-model="userName"/>
<!-- 组件标签上v-model的本质 -->
<AtguiguInput :modelValue="userName" @update:model-value="userName = $event"/>

AtguiguInput 组件中:

<template>
<div class="box">
<!--将接收的value值赋给input元素的value属性,目的是:为了呈现数据 -->
<!--给input元素绑定原生input事件,触发input事件时,进而触发update:model-value事件-->
<input
type="text"
:value="modelValue"
@input="emit('update:model-value',$event.target.value)"
>
</div>
</template>
<script setup lang="ts" name="AtguiguInput">
// 接收props
defineProps(['modelValue'])
// 声明事件
const emit = defineEmits(['update:model-value'])
</script>

五、【$refs、$parent】

1. 概述:
● $refs 用于 :**父→子。**
● $parent 用于:**子→父。**


1. 原理如下:

属性说明
$refs 值为对象,包含所有被 ref 属性标识的 DOM 元素或组件实
例。
$parent值为对象,当前组件的父组件实例对象。


http://www.mrgr.cn/news/4336.html

相关文章:

  • 【大模型理论篇】关于LLaMA 3.1 405B以及小模型的崛起
  • Nginx: 配置项之server_name指令用法梳理
  • 什么是零拷贝?以及数据在内存中的流动途径
  • 手撕⼆叉树——堆
  • (2024)vue2+vue3学习笔记(持续更新)
  • 【精选】基于Python大型购物商城系统(京东购物商城,淘宝购物商城,拼多多购物商城爬虫系统)
  • H5,防止 h5 无限 debugger
  • 转转系统源码开发
  • 关于NetTopologySuite这个C#库的学习
  • 轮播图制作思路
  • 黑神话悟空苹果电脑可以玩吗?MacBook玩黑神话悟空游戏攻略 crossover软件永久激活码分享 crossover免费使用教程
  • 稳压二极管、肖特基二极管、TVS管、静电ESD管的区别
  • 数据结构—— 再探二叉树
  • ES高级查询Query DSL查询详解、term术语级别查询、全文检索、highlight高亮
  • 简单笔记--Qt控件的重要属性--QWidget
  • 大数据应用整理
  • 数据结构中的双向链表
  • 深入理解逻辑回归
  • JAVA学习-练习试用Java实现“路径交叉”
  • RabbitMQ(面试篇)