Vue3 + vite + Ts 组件间通信

Vue3 + vite + Ts 组件间通信

  • 1、props
  • 2、自定义事件
  • 3、mitt
  • 4、$attrs

1、props

  • 概述:props 是使用频率最高的一种通信方式,常用与: 互相传递
    • 父传子 :属性值是非函数。
    • 子传父 :属性值是函数。
  • 简单例子:
<!--父组件-->
<template><div class="app"><h3>App 页面</h3><h4>{{ str }}</h4><h5 v-if="toy">儿子给的玩具:{{ toy }}</h5><Test :str="str" :getToy="getToy" /></div>
</template><script setup lang="ts">
import { ref } from "vue";
import Test from "@/components/Test.vue";const str = ref<string>("父亲有一台车,车名叫:劳斯莱斯");const toy = ref<string>("");
/*** 获取儿子给玩具信息方法*/
function getToy(value: string) {toy.value = value;
}
</script><style lang="scss">
.app {background: pink;padding: 20px;border-radius: 10px;box-shadow: 2px 2px 2px #cdcdcd;
}h3 {color: #c00000;
}h5 {color: green;
}
</style>
<!--子组件-->
<template><div class="clid"><h3>我是 测试 自定义组件</h3><h4>{{ clidStr }}</h4><h5>父亲把车传给了儿子:{{ str }}</h5><el-button type="warning" @click="getToy(clidStr)">给父亲玩具</el-button></div>
</template><script setup lang="ts">
import { ref } from "vue";
defineProps(["str", "getToy"]);const clidStr = ref("儿子有一个玩具,名字叫:奥特曼");
</script><style lang="scss" scoped>
.clid {padding: 20px;border-radius: 10px;background: #f8f8f8;
}
</style>

2、自定义事件

  • 简单例子,代码如下:
<!--父组件-->
<template><div class="app"><h3>App 页面</h3><h4 v-if="str">儿子给的玩具:{{ str }}</h4><!-- 给子组件 Test 绑定自定义事件 --><Test @customHandle="handle" /></div>
</template><script setup lang="ts">
import { ref } from "vue";
import Test from "@/components/Test.vue";const str = ref<string>("");/*** 自定义事件* 子组件会调用*/
function handle(data: string) {str.value = data;
}
</script><style lang="scss">
.app {background: pink;padding: 20px;border-radius: 10px;box-shadow: 2px 2px 2px #cdcdcd;
}h3 {color: #c00000;
}h5 {color: green;
}
</style>
<!--子组件-->
<template><div class="clid"><h3>我是 测试 自定义组件</h3><h4>我是一个玩具:{{ clidStr }}</h4></div>
</template><script setup lang="ts">
import { ref, onMounted } from "vue";const clidStr = ref("儿子有一个玩具,名字叫:奥特曼");// 声明事件
const emit = defineEmits(["customHandle"]);/*** 声明周期函数* 程序运行 3 秒后执行方法*/
onMounted(() => {setTimeout(() => {emit("customHandle", clidStr.value);}, 3000);
});
</script><style lang="scss" scoped>
.clid {padding: 20px;border-radius: 10px;background: #f8f8f8;
}
</style>

3、mitt

  • mitt:是一种工具;
  • 任意组件间通信

pubsub、$bus、mitt
接收数据的:提前绑定好事件(pubsub:提前订阅消息)
提供数据的:在合适的时候触发事件(pubsub:发布消息)

  • 安装 mitt
npm install mitt
  • 在项目根目录 src 中创建 utils 文件夹,然后在 utils 文件夹中创建 emitter.ts 文件,代码如下:
// 引入 mitt
import mitt from "mitt";// 调用 mitt 得到 emitter ,emitter 能:绑定事件、触发事件
const emitter = mitt();// 绑定事件
emitter.on("test", () => {console.log("test 事件已触发");
});emitter.on("test2", () => {console.log("test2 事件已触发");
});// 触发事件
emitter.emit("test");
emitter.emit("test2");// 解绑事件
emitter.off("test");
emitter.off("test2");// 全部解绑
emitter.all.clear();// 暴露 emitter
export default emitter;
  • API 说明
    在这里插入图片描述

  • 项目中使用示例:
    在这里插入图片描述

4、$attrs

  • 概述:$attrs 用于实现当前组件的父组件,向当前组件的子组件通信(祖 传 孙)。
  • 具体说明:$attrs 是一个对象,包含所有父组件传入的标签属性。

注意:$attrs 会自动排除 props 中声明的属性(可以认为声明过的 props 被子组件自己“消费”了)

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

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

相关文章

网红电商主播培养体系招聘管理制度孵化方案

【干货资料持续更新&#xff0c;以防走丢】 网红电商主播培养体系招聘管理制度孵化方案 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 共120页可编辑&#xff08;完整资料包含以下内容&#xff09; 目录 主播团队组建方案 让好主播主动留下 1. 好主播选拔标准…

【Flink】Flink 处理函数之基本处理函数(一)

1. 处理函数介绍 流处理API&#xff0c;无论是基本的转换、聚合、还是复杂的窗口操作&#xff0c;都是基于DataStream进行转换的&#xff0c;所以统称为DataStreamAPI&#xff0c;这是Flink编程的核心。 但其实Flink为了更强大的表现力和易用性&#xff0c;Flink本身提供了多…

学习SpringBoot笔记--知识点(2)

目录 数据访问 基础特性 自定义banner Profiles Profiles组件 Profiles配置文件 外部化配置 单元测试 数据访问 整合SSM场景 SpringBoot 整合 Spring&#xff0c;SpringMVC&#xff0c;MyBatis 进行数据访问场景开发 需要的依赖&#xff1a; <!-- web启动…

如何从其他平台复制商品上传到自己店铺?官方授权接口,一键复制爆款同款

很多做一件代发的卖家在上新时会从其他平台选品铺货&#xff0c;看到某个商品卖得不错&#xff0c;直接复制到自己店铺去卖&#xff0c;可以节省测款成本。 现在平台严查无货源&#xff0c;直接从别人店铺搬运商品属于违规违规行为&#xff0c;想要复制这个爆款的话&#xff0…

鸿蒙HarmonyOS应用开发—AbilityStage组件容器

AbilityStage是一个Module级别的组件容器&#xff0c;应用的HAP在首次加载时会创建一个AbilityStage实例&#xff0c;可以对该Module进行初始化等操作。 AbilityStage与Module一一对应&#xff0c;即一个Module拥有一个AbilityStage。 DevEco Studio默认工程中未自动生成Abil…

ArcGIS二次开发(一)——搭建开发环境以及第一个简单的ArcGIS Engine 程序

Arcgis10.2、Arcgis Engine10.2与Microsoft Visual Studio 2012的版本进行安装 1、推荐教程与安装包2、安装顺序3、安装成功测试VS新建项目可以创建ArcGIS项目&#xff0c;并且在VS中拖拽ArcGIS工具 4、搭建第一个简单的ArcGIS Engine 程序 ArcEngine和VS版本是有对应的&#x…

【Python】enumerate函数的使用方法,小白一看就懂

enumerate函数的使用方法&#xff1a; season[‘a’,‘b’,‘c’,‘d’] for i in enumerate(season): print(i) season[‘a’,‘b’,‘c’,‘d’] for i,eliment in enumerate(season): print(i,eliment) 输出结果为&#xff1a; 练习题&#xff1a; 2.给出10个学生姓名…

从0到1:校园生活圈小程序开发笔记(一)

可行性研究 校园生活圈小程序是一种面向大学或学院校园的社交平台&#xff0c;旨在为校园内的师生提供交流、分享、互助和信息发布等功能。 为校园内的师生提供一个便捷的平台&#xff0c;帮助他们更好地了解校园生活、参与校园活动、交流学习和共享资源。 功能分解 公告资讯…

力扣HOT100 - 42. 接雨水

解题思路&#xff1a; 动态规划 感觉不是很好想 class Solution {public int trap(int[] height) {int n height.length;if (n 0) return 0;int[] leftMax new int[n];leftMax[0] height[0];for (int i 1; i < n; i) {leftMax[i] Math.max(leftMax[i - 1], height[i…

JS加密解密之应用如何保存到桌面书签

前言 事情起因是这样的&#xff0c;有个客户解密了一个js&#xff0c;然后又看不懂里边的一些逻辑&#xff0c;想知道它是如何自动拉起谷歌浏览器和如何保存应用到书签的&#xff0c;以及如何下载应用的。继而诞生了这篇文章&#xff0c;讲解一下他的基本原理。 渐进式Web应用…

docker使用教程

寒假用了docker 2个月没用 结果还重新安装docker 忘了怎么用 为了免得以后忘写下下面内容 # If you dont have a docker installed, youll need to install docker curl -s https://get.docker.com/ | sh # Use pip to install docker-compose pip install docker-compose…

【力扣hot100】207 课程表(c++、python)解析

相关题目&#xff1a; 210 课程表2 【力扣hot100】207 课程表&#xff08;c、python&#xff09;解析 1.官方题解&#xff1a;1.1深搜c版本python版本 1.2广搜c版本 1.官方题解&#xff1a; 这是一题经典的「拓扑排序」问题 给定一个包含 n 个节点的有向图 G&#xff0c;我们…

网络七层模型:理解网络通信的架构(〇)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

idea-创建java8的springboot项目

现在使用IDEA创建 Spring Boot 项目&#xff0c;jdk 版本最低要求为 17。Spring Boot 官方在全力维护 3.x 版本&#xff0c;而 Spring Boot 3.x 对 jdk 版本的最低要求为17。 如果需要继续使用 jdk8&#xff0c;则需要修改 Server URL &#xff0c;改成&#xff1a;https://st…

解决 vue activited 无效问题

当对页面APP.vue组件router-view标签使用了keep-alive之后在组件activated状态时不会发送请求&#xff0c;这时需要使用 keep-alive标签的 exclude属性排除需要重新发送请求的组件。需要注意exclude的值要和组件本身的name值要一致&#xff0c;如果不一致就会不生效。目前我出现…

C++运算符重载中的引用返回

文章目录 引言原因1.为了支持链式调用2.避免不必要的对象创建和复制3.保持语义一致性 引言 在C编程语言中&#xff0c;运算符重载是一项强大的特性&#xff0c;它允许程序员为自定义类型重新定义或重载已有的运算符&#xff0c;从而使得这些类型能够像内置类型一样使用运算符。…

离线linux服务器安装mysql8

本文的服务器环境&#xff1a;openEuler毛坯版的&#xff0c;很多常用的指令都没有预装&#xff0c;比如rpm、tar等等&#xff0c;没有网络坏境&#xff0c;需要自己手动配置本地yum仓库&#xff0c;安装相关指令 1、检查服务器是否已经安装了MySQL 1.1、查询mysql以安装的相关…

使用Docker本地搭建蚂蚁笔记并实现无公网IP远程访问

文章目录 1. 安装Docker2. Docker本地部署Leanote蚂蚁笔记3. 安装cpolar内网穿透4. 固定Leanote蚂蚁笔记公网地址 本篇文章介绍如何使用Docker部署Leanote蚂蚁笔记&#xff0c;并且结合cpolar内网穿透实现公网远程访问本地笔记编辑并制作个人博客等。 Leanote 蚂蚁笔记是一款云…

Echarts 仪表盘

1、效果图 2、代码 createTenantChartOne(){var myChart1 this.$echarts.init(document.getElementById(tenant-chart-1));var dataArr 82;var title 仪表盘;let option {graphic: {type: text,left: center,top: 85%,style: {text: title,textAlign: center,//居中对齐fi…

微服务高级篇(五):可靠消息服务

文章目录 一、消息队列MQ存在的问题&#xff1f;二、如何保证 消息可靠性 &#xff1f;2.1 生产者消息确认【对生产者配置】2.2 消息持久化2.3 消费者消息确认【对消费者配置】2.4 消费失败重试机制2.5 消费者失败消息处理策略2.6 总结 三、处理延迟消息&#xff1f;死信交换机…