vue间的组件通讯

文章目录

    • 父子组件通讯(通过props和$emit)
    • 兄弟组件通讯(使用事件总线):
    • 跨级组件通讯(使用provide/inject):
    • 使用Vuex状态管理:
    • 使用$refs引用组件:

父子组件通讯(通过props和$emit)

父组件可以通过props将数据传递给子组件,子组件可以通过$emit触发事件将数据传递回父组件。

<!-- ParentComponent.vue -->
<template><div><ChildComponent :message="parentMessage" @childEvent="handleChildEvent" /></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {data() {return {parentMessage: 'Hello from parent',};},components: {ChildComponent,},methods: {handleChildEvent(data) {console.log('Data received from child:', data);},},
};
</script>
<!-- ChildComponent.vue -->
<template><div><p>{{ message }}</p><button @click="emitEvent">Send Event</button></div>
</template><script>
export default {props: ['message'],methods: {emitEvent() {this.$emit('childEvent', 'Data from child');},},
};
</script>

兄弟组件通讯(使用事件总线):

可以通过共享一个父组件中的数据或使用事件总线(Event Bus)来实现兄弟组件之间的通讯

// EventBus.js
import Vue from 'vue';
export default new Vue();
<!-- ComponentA.vue -->
<template><div><input type="text" v-model="message" /><button @click="sendMessage">Send Message</button></div>
</template><script>
import EventBus from './EventBus.js';export default {data() {return {message: '',};},methods: {sendMessage() {EventBus.$emit('messageEvent', this.message);},},
};
</script>
<!-- ComponentB.vue -->
<template><div><p>{{ receivedMessage }}</p></div>
</template><script>
import EventBus from './EventBus.js';export default {data() {return {receivedMessage: '',};},mounted() {EventBus.$on('messageEvent', (message) => {this.receivedMessage = message;});},
};
</script>

跨级组件通讯(使用provide/inject)

可以使用provide/inject来在祖先组件中提供数据,并在后代组件中注入数据。

<!-- GrandparentComponent.vue -->
<template><div><ParentComponent><ChildComponent /></ParentComponent></div>
</template><script>
import { provide } from 'vue';export default {setup() {const sharedData = 'Shared Data';provide('sharedData', sharedData);return {};},
};
</script>
<!-- ParentComponent.vue -->
<template><div><slot></slot></div>
</template><script>
export default {setup() {return {};},
};
</script>
<!-- ChildComponent.vue -->
<template><div><p>{{ injectedData }}</p></div>
</template><script>
import { inject } from 'vue';export default {setup() {const injectedData = inject('sharedData');return {injectedData,};},
};
</script>

使用Vuex状态管理

Vuex是Vue官方提供的状态管理库,可以用于在不同组件之间共享状态。

首先,需要安装和配置Vuex。然后,可以使用store中的state、mutations、actions等来修改和获取共享状态。

// store.js
import { createStore } from 'vuex';const store = createStore({state() {return {message: '',};},mutations: {setMessage(state, message) {state.message = message;},},
});export default store;
<!-- ComponentA.vue -->
<template><div><input type="text" v-model="message" /><button @click="updateMessage">Update Message</button></div>
</template><script>
import { useStore } from 'vuex';export default {data() {return {message: '',};},methods: {updateMessage() {const store = useStore();store.commit('setMessage', this.message);},},
};
</script>
<!-- ComponentB.vue -->
<template><div><p>{{ receivedMessage }}</p></div>
</template><script>
import { computed } from 'vue';
import { useStore } from 'vuex';export default {setup() {const store = useStore();const receivedMessage = computed(() => {return store.state.message;});return {receivedMessage,};},
};
</script>

使用$refs引用组件

每个Vue组件都有一个唯一的ref属性,可以用于在父组件中引用子组件的实例,然后通过实例直接调用子组件的方法或访问数据。

<!-- ParentComponent.vue -->
<template><div><ChildComponent ref="child" /><button @click="callChildMethod">Call Child Method</button></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent,},methods: {callChildMethod() {this.$refs.child.childMethod();},},
};
</script>
<!-- ChildComponent.vue -->
<template><div><p>{{ childData }}</p></div>
</template><script>
export default {data() {return {childData: 'Data from child',};},methods: {childMethod() {console.log('Child method called');},},
};
</script>

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

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

相关文章

广度优先-BFS

介绍 以广度为准&#xff0c;先访问从岔道能直接到达的所有结点&#xff0c;然后再按这些结点被访问顺序访问它们能直接到达的结点&#xff0c;直至全部遍历完。 求矩阵中元素上下左右均为1所组成的块的数目 #include <iostream> #include <queue> using namesp…

写点技术人员离职的心得

离职的心态 人们在辞退或者被辞退都会对原公司抱有意见&#xff0c;因为疫情&#xff0c;公司业务告急&#xff0c;工资发不出来&#xff0c;我也失去了工作。虽然情绪上难免会有波动&#xff0c;但是转念一想&#xff0c;我应该用开心的心态来看待这次辞职&#xff0c;并希望…

Linux之JAVA环境配置jdkTomcatMySQL

目录 一. 安装jdk 1.1 查询是否有jdk 1.2 解压 1.3 配置环境变量 二. 安装Tomcat&#xff08;开机自启动&#xff09; 2.1 解压 2.2 启动tomcat 2.3 防火墙设置 2.4 创建启动脚本&#xff08;设置自启动&#xff0c;服务器开启即启动&#xff09; 三. MySQL安装&#xff08;…

vscode使用restClient实现各种http请求

vscode使用restClient实现各种http请求 一&#xff0c;安装插件 首先&#xff0c;我们要在vscode的扩展中&#xff0c;搜索rest Client&#xff0c;然后安装它&#xff0c;这里我已经安装过了。 安装后&#xff0c;我们就可以使用rest client插件进行http各种操作了。 二&…

Unity接入SQLite (二):SQL常用命令

在上一篇上《Unity接入SQLite (一):SQLite介绍-CSDN博客》中已经介绍了如何在Unity中接入SQLite插件&#xff0c;并且创建了一个db文件。如何进行数据库的读取&#xff0c;其中SQL命令非常重要 1.SQL支持的数据类型 SQL数据类型是用来定义数据库中存储的数据的类型&#xff0…

二分图匹配详解

二分图的原始模型及相关概念 二分图又称作二部图&#xff0c;是图论中的一种特殊模型。 设G(V,E)G(V,E)是一个无向图。 如顶点集V可分割为两个互不相交的子集&#xff08;A, B&#xff09;&#xff0c;并且图中每条边(i&#xff0c;j)所关联的两个顶点 i 和 j 就都分属两个不…

定时任务处理-Spring Task

目录 1 前言 2 cron表达式 2.1 相关概念的介绍 2.2 举个例子(白雪警告) 2.3 使用网站自动生成 3 Spring Task的使用 3.1 导入依赖坐标 3.2 开启任务调度 3.3 自定义定时任务类 1 前言 当我们需要处理一些定时任务的时候就需要用到我们的Spring Task&#xff0c;接下来…

(done) 两个矩阵 “相似” 是什么意思?

参考视频&#xff1a;https://www.bilibili.com/video/BV1zu411673J/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 参考资料&#xff1a;https://baike.baidu.com/item/%E7%9B%B8%E4%BC%BC%E7%9F%A9%E9%98%B5/10369874?frge_a…

算能RISC-V通用云编译飞桨paddlepaddle@openKylin留档

尝试一在riscv里编译飞桨。 先总结&#xff1a; 下载飞桨代码&#xff0c;参照pr修改代码 然后编译 cmake ../ -DWITH_GPUOFF -DWITH_RISCVON make -j 16 TARGETRISCV64_GENERIC 编译好后安装&#xff1a; pip install paddlepaddle-0.0.0-cp38-cp38-linux_riscv64.whl -…

Opencv(C++)学习 ARM上引用opencv报相关头文件找不到

简单问题记录&#xff0c;C 与C互相引用时应该多注意类似问题。 问题描述&#xff1a;在项目中&#xff0c;建立了一个interface.h提供了一个C语言兼容的接口void work()&#xff0c;并在对应的interface.cpp中使用OpenCV完成相关处理实现。在PC端测试时&#xff0c;main.cpp成…

【HTML/CSS/JavaScript-编程指南】

HTML/CSS/JavaScript-编程指南 ■ HTML/CSS/JavaScript简介■ HTML/CSS/JavaScript学习网站■ VScode■ VSCode编写HTML■ VSCode编写CSS■ VSCode编写JavaScript ■ 语法■ HTML语法■ CSS语法■ JavaScript 语法 ■ HTML/CSS/JavaScript简介 HTML&#xff08;全称 Hypertext…

小波变换模拟

小波变换是一种信号处理技术&#xff0c;通过在时间-频率域中使用基于小波的函数进行信号分析。小波变换在处理非平稳信号和图像时特别有用&#xff0c;可以将信号分解为不同频率的成分。它在数据压缩、去噪、特征提取等领域有广泛应用。 MATLAB中提供了用于二维离散小波变换的…

css4浮动+清除浮动

浮动 一.常见网页布局1.三种布局方式2.布局准则 二.浮动&#xff08;float&#xff09;1.好处2.概念3.三大特性4.使用5.常见网页布局模板6.注意点 三.清除浮动1.why2.本质3.语法4.四种way&#xff08;后三个都是给父级添加&#xff09;清除浮动总结 一.常见网页布局 1.三种布局…

终端启动jupyter notebook更换端口

一、问题描述 如果尝试在端口 8889 上启动 Jupyter Notebook 但最终启动在了 8890 端口&#xff0c;这通常意味着 8889 端口已经被占用。要解决这个问题&#xff0c;可以尝试以下几种方法来关闭占用 8889 端口的进程。 1. 查找并终止占用端口的进程 首先&#xff0c;需要找出…

课时45:表达式_表达式_字符串表达式

3.2.3 字符串表达式 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 所谓的字符串表达式&#xff0c;主要是判断 比较运算符 两侧的值的内容是否一致&#xff0c;由于bash属于弱类型语言&#xff0c;所以&#xff0c;默认情况…

【课程作业】提取图中苹果的面积、周长和最小外接矩形的python、matlab和c++代码

提取图中苹果的面积、周长和最小外接矩形 在图像处理中&#xff0c;提取对象的关键属性是常见的任务之一。本文将演示如何使用三种流行的编程语言——Python、Matlab和C&#xff0c;利用相应的图像处理库&#xff08;OpenCV或Matlab内置函数&#xff09;来提取图像中苹果的面积…

Java8 Stream API 详解:流式编程进行数据处理

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

切比雪夫(最小区域法)平面拟合算法

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 本期话题&#xff1a;切比雪夫&#xff08;最小区域法&#xff09;平面拟合算法 相关背景和理论 点击前往 主要介绍了应用背景和如何转化成线性规划问题 平拟合输入和…

Vue2:多级路由案例

一、情景说明 上一节&#xff0c;我们学习了Vue中的路由功能 但是&#xff0c;只是基础的一级路由 在实际生产中&#xff0c;路径不可能只有一级&#xff0c;一般都有3,4层级 二、案例 1、修改路由器文件 index.js 新增两个组件 这里实现二级路由配置 关键配置&#xff1a;…

命题逻辑|析取、合取和蕴含到底什么意思

如是我闻&#xff1a;在逻辑学中&#xff0c;“析取”、“合取”和“蕴含”这些术语的中文翻译是有其逻辑和哲学基础的&#xff0c;它们准确地反映了这些逻辑操作的本质。虽然他们被翻译的很高级&#xff0c;但并不能让人一下子就明白。 析取 (Disjunction) 原理&#xff1a;…