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,一经查实,立即删除!

相关文章

【C++】this关键字和new关键字

一、this关键字 在 C 中&#xff0c; this 关键字是一个 指向调用对象的指针 。它在成员函数内部使用&#xff0c;用于引用调用该函数的对象。使用 this 可以明确指出成员函数正在操作的是哪个对象的数据成员。 示例&#xff1a; #include <iostream>using namespa…

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

【干货资料持续更新&#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启动…

leetcode 518.零钱兑换 II

思路&#xff1a;和第一道是一样的问题&#xff0c;也就是完全背包问题。 我们首先可以看到&#xff0c;每一个数都是可以重复使用的&#xff0c;而且&#xff0c;数的选择上有两种&#xff0c;一种就是选&#xff0c;一种就是不选。所以会想到完全背包问题。 上一个题的零钱…

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

很多做一件代发的卖家在上新时会从其他平台选品铺货&#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…

东方 - 分支(1)

目录 解析部分&#xff1a;双分支1303. 冷饮的价格&#xff08;1&#xff09;问题描述解题思路代码实现代码解析 1033. 判断奇偶数问题描述解题思路代码实现代码解析 1302. 是否适合晨练&#xff1f;问题描述解题思路代码实现代码解析 1632. 需要几辆车问题描述解题思路代码实现…

Leetcode 453. 最小操作次数使数组元素相等

原题链接&#xff1a;Leetcode 453. minimum moves to equal array elements Given an integer array nums of size n, return the minimum number of moves required to make all array elements equal. In one move, you can increment n - 1 elements of the array by 1. …

【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个学生姓名…

5. C++ 局部静态变量在什么时候分配内存和初始化?

C局部静态变量在什么时候分配内存和初始化&#xff1f; 对于C语言的全局和静态变量&#xff0c;不管是否被初始化&#xff0c;其内存空间都是全局的&#xff1b;如果初始化&#xff0c;那么初始化发生在任何代码执行之前&#xff0c;属于编译期初始化。由于内置变量无须资源释…

从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;如果不一致就会不生效。目前我出现…