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

Vue3的组件如何通讯

一、defineProps,defineEmits

子组件nameChange.vue

<template><div class="title">姓:{{ firstName }}</div><div>名:{{ lastName }}</div>{{ name }}<button @click="clickTap">传参</button>
</template><script setup lang="ts">
import { Ref } from 'vue';type props = {firstName: string,lastName: string
}
const prop = withDefaults(defineProps<props>(), {firstName: 'c',lastName: 'qs'
})const emit = defineEmits<{(e: "on-click", name: props): void
}>()const clickTap = () => {emit('on-click', prop);
}
</script>
<style></style>

父组件

<template><nameChange @on-click="getName" first-name="c" last-name="qs"></nameChange>
</template>
<script setup lang="ts">
import { reactive } from 'vue';
type props = {firstName: string,lastName: string
}
let names = reactive<props>({firstName: '1',lastName: '2'
});
import nameChange from "./components/nameChange.vue";const getName = (data: props) => {names.firstName = data.firstName;names.lastName = data.lastName;
}
</script>
二、provide,inject
//注入依赖
const colorName = ref<string>('#fff449')
provide('colorName', colorName)//获取依赖
const color = inject<Ref<string>>('colorName');
color!.value = 'blue';
三、defineExpose

子组件暴露数据

<script setup lang="ts">
defineExpose({name: 'cqs'
})
</script>

父组件通过ref获取

<template><nameChange ref="refName"></nameChange>
</template>
<script setup lang="ts">
import nameChange from "./components/nameChange.vue";const refName = ref<InstanceType<typeof nameChange>>()
onMounted(() => {console.log(refName.value);
})</script>
四、mitt

通过插件mitt,相当于vue2的bus总线

注册

import { createApp } from 'vue'
import App from './App.vue'
import mitt from 'mitt'const Mitt = mitt();const app = createApp(App)app.config.globalProperties.$Bus = Mitt;app.mount('#app')

监听

<template></template>    <script setup lang="ts">
import { ref, getCurrentInstance } from 'vue';
type prop1 = {name: string
}
const title = ref('这是A组件')
const instance = getCurrentInstance()
instance?.proxy?.$Bus.on('changeName', (name:any) => {title.value = name
});
</script>

触发

<template><button @click="changeName">修改name</button>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { getCurrentInstance } from 'vue';
const title = ref('这是B组件')const instance = getCurrentInstance()const changeName = () => {instance?.proxy?.$Bus.emit('changeName', '我是新数据')
}
</script>
五、v-model

父组件,可以添加v-model:textVal1.isSb自定义修饰符,通过textVal1Modifiers获取

<template>isShow:{{ value }}text: {{ text }}<dialcoag v-model:textVal1.isSb="text" v-model="value"></dialcoag>    
</template>
<script setup lang="ts">
import dialcoag from './components/dialoag.vue';
import { ref } from 'vue';
const value = ref<boolean>(true)
const text = ref<string>('cqs')
</script>
<style>
* {text-align: left;
}
</style>

子组件

<template><div>{{ modelValue }}</div><div>{{ textVal1 }}</div><button @click="close">关闭</button>
</template> 
<script setup lang="ts">
const props = defineProps<{modelValue: boolean,textVal1: string,textVal1Modifiers?: {isSb: boolean} 
}>()const emit = defineEmits(['update:modelValue', 'update:textVal1'])const close = () => {emit('update:modelValue', false);emit('update:textVal1', props.textVal1Modifiers?.isSb ? 'dadadada' + 'sb' : '123456 ')
}
</script>

 

相关文章:

Vue3的组件如何通讯

一、defineProps&#xff0c;defineEmits 子组件nameChange.vue <template><div class"title">姓&#xff1a;{{ firstName }}</div><div>名&#xff1a;{{ lastName }}</div>{{ name }}<button click"clickTap">传…...

MySQL SUBSTRING_INDEX 函数用法

定义和用法 SUBSTRING_INDEX()函数在指定数量的分隔符出现之前返回字符串的子字符串。 语法 SUBSTRING_INDEX(string, delimiter, number) 参数值 参数 描述 string 必须项。原始字符串 delimiter 必须项。要搜索的分隔符 number 必须项。搜索分隔符的次数。可以是正…...

腾讯微服务平台TSF学习笔记(一)--如何使用TSF的Sidecar过滤器实现mesh应用的故障注入

Mesh应用的故障注入 故障注入前世今生Envoy设置故障注入-延迟类型设置故障注入-延迟类型并带有自定义状态码总结 故障注入前世今生 故障注入是一种系统测试方法&#xff0c;通过引入故障来找到系统的bug&#xff0c;验证系统的稳健性。istio支持延迟故障注入和异常故障注入。 …...

day30_servlet

今日内容 零、复习昨日 一、接收请求 二、处理响应 三、综合案例 零、复习昨日 画图, 请求处理的完整流程(javaweb开发流程) 零、注解改造 WebServlet注解,相当于是在web.xml中配置的servlet映射 Servlet类 package com.qf.servlet;import javax.servlet.ServletException; im…...

计算机毕业设计 基于SpringBoot的社区物资交易互助平台/系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

go 判断两棵树内容是否一致

goroutine http://127.0.0.1:3999/concurrency/8 question 使用 go 判断 两个 树 存放的 序列 是否 相同, 如果 相同 他们 被称为 equivalent_tree tree struct type Tree struct {Left *TreeValue intRight *Tree }由于 递归的 写法 比较简单, 此处 使用循环的 形式 来实…...

从Hugging Face上手动下载并加载预训练模型

0. 说明&#xff1a; 从 Hugging Face 上下手动载预训练的蛋白质语言模型&#xff08;以ProstT5为例&#xff09;&#xff0c;用模型中的 encoder 部分对蛋白质进行编码&#xff0c;得到 embedding features&#xff0c;用于下游的任务。 【ps. 除了手动下载之外&#xff0c;…...

Vue 前置 后置 路由守卫 独享 路由权限控制 自定义属性

import Vue from vue import VueRouter from vue-router //导入路由器 Vue.use(VueRouter)import Login from ../components/Login import User from ../components/User //导入需要路由的组件const router new VueRouter({//暴露出去使用routes:[{path: /login,component: Lo…...

upload-labs关卡11(双写后缀名绕过)通关思路

文章目录 前言一、回顾前几关知识点二、靶场第十一关通关思路1、看源代码2、bp抓包双写后缀名绕过3、检查文件是否成功上传 总结 前言 此文章只用于学习和反思巩固文件上传漏洞知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚未授权的…...

go语言学习之旅之Go语言基础语法二

学无止境&#xff0c;今天继续学习go语言的基础语法 变量&#xff08;Variables&#xff09;: 变量声明&#xff1a; var x int变量初始化&#xff1a; var x int 10或者可以使用类型推断&#xff1a; x : 10多变量声明&#xff1a; var a, b, c int同时初始化多个变量&#…...

七天.NET 8操作SQLite入门到实战 - SQLite 简介

什么是SQLite&#xff1f; SQLite是一个轻量级的嵌入式关系型数据库&#xff0c;它以一个小型的C语言库的形式存在。它的设计目标是嵌入式的&#xff0c;而且已经在很多嵌入式产品中使用了它&#xff0c;它占用资源非常的低&#xff0c;在嵌入式设备中&#xff0c;可能只需要几…...

问题 R: 胜利大逃亡(HUST)

#include <deque> #define inf 200000 #include<iostream> #include<queue> using namespace std;// 迷宫坐标 int map[59][59][59] { 0 };// 可访问标记 int visit[51][51][51] { 0 }; // 移动方式 int next1[7][4] { {1,0,0},{-1,0,0}, {0,1,0},{0,-1,…...

项目讲解:让你在IT行业面试中以开发、实施、产品更近一步

1、会议系统项目 项目介绍 提示&#xff1a;可以简单介绍IT技术发展的背景 面试准备 开发 实施 产品 2、医疗项目 项目介绍 提示&#xff1a;可以谈谈你认为IT行业就业方向有哪些&#xff0c;并说出你认为最好的就业领域是什么&#xff1f; 面试准备 开发 实施 产品 3、数字化交…...

Windows 安装 Docker

目录 前言安装 WSL2WSL2 简介系统要求安装步骤 安装 Docker Desktop下载安装验证 安装 Docker Compose结语开源项目 前言 下图展示了在 Windows 系统上安装 Docker&#xff0c;并利用Docker Compose一键搭建 youlai-mall 微服务商城所需的环境。本篇将先介绍 Windows 上如何安…...

AI绘画使用Stable Diffusion(SDXL)绘制三星堆风格的图片

一、前言 三星堆文化是一种古老的中国文化&#xff0c;它以其精湛的青铜铸造技术闻名&#xff0c;出土文物中最著名的包括青铜面具、青铜人像、金杖、玉器等。这些文物具有独特的艺术风格&#xff0c;显示了高度的工艺水平和复杂的社会结构。 青铜面具的巨大眼睛和突出的颧骨&a…...

Window下如何对Redis进行开启与关闭

目录 前言1. 图文界面2. 命令行 前言 由于长期使用Linux界面&#xff0c;对于Window下的Redis&#xff0c;不知如何下手。特此记录该博文 特别注意&#xff0c;刚下载好的Redis&#xff0c;如果需要配置密码&#xff0c;可以再该文件进行配置&#xff1a;redis.windows-servi…...

C++ Qt 学习(十):Qt 其他技巧

1. 带参数启动外部进程 QProcess 用于启动外部进程int QProcess::execute(const QString &program, const QStringList &arguments);QObject *parent; ... QString program "./path/to/Qt/examples/widgets/analogclock"; QStringList arguments; argument…...

跳台阶游戏(Python排列组合函数itertools.combinations的应用)

给定台阶总数和两种单次可跳级数&#xff0c;编写自定义函数&#xff0c;计算所有的游戏组合方案数量。 (笔记模板由python脚本于2023年11月19日 19:18:48创建&#xff0c;本篇笔记适合熟悉python自定义函数编写&#xff0c;了解排列组合知识的coder翻阅) 【学习的细节是欢悦的…...

【Python百宝箱】Python测试工具大揭秘:从单元测试到Web自动化

前言 在现代软件开发中&#xff0c;测试是确保代码质量和稳定性的关键步骤。Python作为一门广泛应用的编程语言&#xff0c;拥有丰富的测试工具和库&#xff0c;从单元测试到Web自动化&#xff0c;覆盖了多个测试层面。本文将介绍一系列Python测试工具&#xff0c;帮助开发者选…...

〖大前端 - 基础入门三大核心之JS篇㊵〗- DOM事件监听及onxxx的使用

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…...

BabylonJS 6.0 实战:从零构建你的专属摄像机控制器

1. 认识BabylonJS摄像机控制器 第一次接触BabylonJS的开发者可能会对摄像机控制感到困惑。为什么我的模型转不动&#xff1f;为什么视角总是固定不变&#xff1f;其实这些问题都源于对摄像机控制机制的不了解。在3D场景中&#xff0c;摄像机就像我们的眼睛&#xff0c;而控制器…...

USB音频类设备开发与同步传输技术详解

1. USB音频类设备开发基础USB音频类设备开发是嵌入式系统设计中的一个重要领域&#xff0c;它利用USB协议中的同步传输技术实现高质量的音频数据传输。这种技术特别适合需要实时性和稳定性的音频应用场景。1.1 同步传输技术原理同步传输(Isochronous Transfers)是USB协议中四种…...

告别Keil破解!STM32CubeIDE保姆级安装与F1/F4器件包配置全攻略

从Keil到STM32CubeIDE&#xff1a;嵌入式开发者的无缝迁移指南 对于长期依赖Keil进行STM32开发的工程师来说&#xff0c;版权风险和编译效率问题始终如鲠在喉。当ST官方推出完全免费的STM32CubeIDE时&#xff0c;这不仅是工具链的简单替换&#xff0c;更代表着开发范式的重要转…...

别急着pip install!PyTorch项目里找不到efficientnet_pytorch,先检查这3个地方

当PyTorch报错找不到efficientnet_pytorch时&#xff0c;资深工程师的排查清单 遇到ModuleNotFoundError: No module named efficientnet_pytorch时&#xff0c;大多数开发者会本能地执行pip install。但真正高效的做法是先进行系统性排查——这能节省你未来数小时的调试时间。…...

苏格拉底式AI智能体锻造平台:原理、实现与应用

1. 项目概述&#xff1a;一个基于苏格拉底式对话的AI智能体锻造平台最近在AI智能体开发领域&#xff0c;一个名为“the-socratic-forge”的项目引起了我的注意。这个项目名本身就很有意思&#xff0c;直译过来是“苏格拉底锻造炉”。它不是一个简单的聊天机器人&#xff0c;而是…...

RimGPT:用GPT与Azure TTS为《边缘世界》打造AI动态语音解说

1. 项目概述与核心价值 如果你玩过《边缘世界》&#xff08;RimWorld&#xff09;&#xff0c;肯定对游戏里那些沉默的殖民者、无声的机械族和安静的动物们习以为常。游戏本身提供了丰富的文字事件和日志&#xff0c;但总感觉少了点什么——一种能让这个科幻殖民地“活”起来的…...

开源AI写作工坊:本地部署、风格可控与文本优化实战

1. 项目概述&#xff1a;一个面向创作者的开源AI写作工坊在内容创作成为日常的今天&#xff0c;无论是自媒体博主、市场文案&#xff0c;还是学术研究者&#xff0c;都面临着一个共同的挑战&#xff1a;如何高效、高质量地产出符合特定风格和要求的文本。市面上的AI写作工具层出…...

Cyclone III FPGA在LCD HDTV图像处理中的优势与应用

1. Cyclone III FPGA在LCD HDTV图像处理中的核心优势LCD HDTV面临的最大技术挑战在于如何实时处理高分辨率视频流数据。传统方案使用ASSP或ASIC存在明显局限——ASSP缺乏算法灵活性&#xff0c;无法实现产品差异化&#xff1b;ASIC开发周期长且成本高昂。Cyclone III FPGA通过以…...

Rust Trait对象与多态:实现灵活的代码复用

Rust Trait对象与多态&#xff1a;实现灵活的代码复用 引言 大家好&#xff0c;我是一名正在从Rust转向Python的后端开发者。在学习Rust的过程中&#xff0c;Trait系统是我觉得最强大的特性之一。与Python的鸭子类型不同&#xff0c;Rust的Trait提供了一种类型安全的多态实现…...

Cursor AI编程效率追踪器:本地化数据采集与可视化分析实践

1. 项目概述&#xff1a;一个为开发者量身定制的效率追踪器最近在GitHub上看到一个挺有意思的项目&#xff0c;叫cursor-usage-tracker。光看名字&#xff0c;你可能觉得这又是一个平平无奇的“使用情况追踪器”。但如果你是一位深度使用Cursor&#xff08;那个集成了AI能力的现…...