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

19、vue3组件通信

1、props

常见搭配形式

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

  • 父传子:属性值是非函数
  • 子传父:属性值是函数

Father.vue

<template><div><h1>父亲</h1><h1>父亲有遗产:【{{ moeny }}】元,要传给儿子</h1><h3>父亲收到儿子送的手机:{{ erziPhone }}</h3><h1>--------------------------</h1><Son :father="moeny" :getIphone="getIphone"/></div>
</template><script setup lang="ts" name="Father">
import Son from './Son.vue';
import { ref } from 'vue';
let moeny=ref(1000)
let erziPhone=ref()function getIphone(value:string){erziPhone.value=value}</script><style scoped></style>

Son.vue

<template><div><h1>儿子</h1><h1>儿子要送父亲一部【{{ iphone }}】手机</h1><h3>继承父亲的遗产:{{ father }}</h3><button @click="getIphone(iphone)">送给父亲手机</button></div>
</template><script setup lang="ts" name="Son">
import { ref } from 'vue';
let iphone=ref('苹果')defineProps(['father','getIphone'])
</script><style scoped></style>

2、自定义事件

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

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

  • 原生事件:

    • 事件名是特定的(clickmosueenter等等)
    • 事件对象$event: 是包含事件相关信息的对象(pageXpageYtargetkeyCode
  • 自定义事件:

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

Father.vue

<template><div><h1>父亲</h1><h1>父亲有遗产:【{{ moeny }}】元,要传给儿子</h1><h3>父亲收到儿子送的手机:{{ erziPhone }}</h3><h1>--------------------------</h1><!-- 给子组件绑定自定义事件 --><Son :father="moeny" @get-iphone="Iphone"/></div>
</template><script setup lang="ts" name="Father">
import Son from './Son.vue';
import { ref } from 'vue';
let moeny=ref(1000)
let erziPhone=ref('')function Iphone(value:string){console.log('value',value)erziPhone.value=value}</script><style scoped></style>

Son.vue

<template><div><h1>儿子</h1><h1>儿子要送父亲一部【{{ iphone }}】手机</h1><h3>继承父亲的遗产:{{ father }}</h3><button @click="emit('get-iphone',iphone)">送给父亲手机</button></div>
</template><script setup lang="ts" name="Son">
import { ref } from 'vue';
let iphone=ref('苹果')defineProps(['father'])
//  声明事件
const emit=defineEmits(['get-iphone'])
</script><style scoped></style>

3、mitt

mitt可以实现任意组件间通信

mitter.ts

import mitt from "mitt";const emitter=mitt()export default emitter

Son.vue

<template><div><h1>儿子</h1><h1>儿子要送父亲一部【{{ iphone }}】手机</h1><button @click="songIphone">送给父亲手机</button></div>
</template><script setup lang="ts" name="Son">
import { ref } from 'vue';
import emitter from '@/utils/mitter';
let iphone=ref('苹果')function songIphone(){emitter.emit('faIphone',iphone)}
</script><style scoped></style>

Father.vue

<template><div><h1>父亲</h1><h3>父亲收到儿子送的手机:{{ erziPhone }}</h3><h1>--------------------------</h1><!-- 给子组件绑定自定义事件 --><Son/></div>
</template><script setup lang="ts" name="Father">
import emitter from '@/utils/mitter';
import { onUnmounted } from 'vue';
import Son from './Son.vue';
import { ref } from 'vue';let erziPhone=ref('')emitter.on('faIphone',(value:any)=>{erziPhone.value=value
})onUnmounted(()=>{// 解绑事件emitter.off('faIphone')
})</script><style scoped></style>

4、v-model

双向绑定,实现 父↔子 之间相互通信。这种方式用的少。


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

相关文章:

  • 2024-我的学习成长之路
  • 检测到联想鼠标自动调出运行窗口,鼠标自己作为键盘操作
  • three.js+WebGL踩坑经验合集(4.1):THREE.Line2的射线检测问题(注意本篇说的是Line2,同样也不是阈值方面的问题)
  • C语言-构造数据类型
  • 无公网IP 外网访问媒体服务器 Emby
  • Visual Studio Code修改terminal字体
  • Java抽象工厂+单例模式
  • 【Java】Jackson序列化案例分析
  • 使用Grafana中按钮插件实现收发HTTP请求
  • 前端登录业务
  • 企业内训|高智能数据构建和多模态数据处理、Agent研发及AI测评技术内训-吉林省某汽车厂商
  • Chapter 03 复合数据类型-1
  • K8S部署CloudNativePG,忘记设置密码,修改管理员密码解决方案
  • [c++进阶(三)]单例模式及特殊类的设计
  • 安装k8s涉及命令(方便放到txt离线使用)
  • 攻防世界web第二题unseping
  • C++模板:编译时模拟Duck Typing
  • LLaMA-Factory GLM4-9B-CHAT LoRA 指令微调实战
  • 【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
  • 【stm32can】
  • CSharp: Oracle Stored Procedure query table
  • 重温设计模式--10、单例模式
  • STM32项目之环境空气质量检测系统软件设计
  • 【Git】-- 版本说明
  • DX12 快速教程(2) —— 渲染天蓝色窗口
  • 笔记本通过HDMI转VGA线连接戴尔显示器,wifi不可用或网速变慢