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

vue 组件通信的解决方案

vue 组件通信的场景和方案

Vue组件间通信是Vue开发中的一个常见问题。以下是一些常见的场景和解决方案:

  1. 父子组件通信:

  • 父组件可以使用props向子组件传递数据。

  • 子组件可以使用$emit方法触发事件,父组件可以监听这些事件。

// 父组件
<template><ChildComponent :parentData="data" @childEvent="handleChildEvent" />
</template>
<script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},data() {return {data: 'some data'};},methods: {handleChildEvent(payload) {// 处理子组件触发的事件}}
};
</script>// 子组件
<template><button @click="sendToParent">Send to Parent</button>
</template>
<script>
export default {props: ['parentData'],methods: {sendToParent() {this.$emit('childEvent', 'data from child');}}
};
</script>
  1. 兄弟组件通信:

  • 可以使用事件总线(Event Bus)或Vuex进行通信。

// Event Bus 示例
// event-bus.js
import Vue from 'vue';
export const EventBus = new Vue();// 组件A
<template><button @click="sendToB">Send to B</button>
</template>
<script>
import { EventBus } from './event-bus.js';export default {methods: {sendToB() {EventBus.$emit('dataForB', 'data from A');}}
};
</script>// 组件B
<template><div>{{ dataFromA }}</div>
</template>
<script>
import { EventBus } from './event-bus.js';export default {data() {return {dataFromA: ''};},created() {EventBus.$on('dataForB', (data) => {this.dataFromA = data;});},beforeDestroy() {EventBus.$off('dataForB');}
};
</script>

 

  1. 跨多层级的组件通信:

  • 可以使用Vuex管理状态,通过状态管理进行跨组件通信。

 

// Vuex store 示例
import Vue from 'vue';
import Vuex from 'vuex';Vue.use(Vuex);export default new Vuex.Store({state: {globalData: ''},mutations: {setGlobalData(state, data) {state.globalData = data;}},actions: {updateGlobalData({ commit }, data) {commit('setGlobalData', data);}}
});// 组件
this.$store.dispatch('updateGlobalData', 'new data');// 另一个组件
computed: {globalData() {return this.$store.state.globalData;}
}
  1. 非父子组件通信:

  • 可以使用provide/inject或事件总线进行通信。

 

// 使用provide/inject进行非父子组件通信的例子// 组件A
<template><div><ChildComponent /></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},provide() {return {parentMessage: 'Hello from parent',parentMethod: this.parentMethod};},methods: {parentMethod() {console.log('Called from child');}}
};
</script>// 组件B
<template><div>{{ parentMessage }}<button @click="parentMethod">Call parent method</button></div>
</template><script>
export default {inject: ['parentMessage', 'parentMethod']
};
</script>

相关文章:

  • react面试题四
  • 【Java】了解线程 Thread 类的使用,如何创建、终止、等待一个线程以及获取线程的状态
  • 【Qt】常见控件 —— QWidget(上)
  • 甲醛最怕三个克星 新家去除甲醛最快最有效的方法
  • Redis内存淘汰
  • Android 息屏录音
  • yolact导出onnx
  • 如何通过数据管理优化储能系统的运行效率?
  • Android Studio SQLite Manage
  • Java集合框架--LIST,ArrayList,LinkedList
  • 笔记-系统规划与管理师-案例题-2022年-IT服务部署实施
  • 第三十一章:docker如何部署Nexus
  • 搭建Windows环境下的Redis服务与TinyRDM客户端
  • libcurl 库curl_easy_setopt()函数CURLOPT_WRITEDATA和CURLOPT_BUFFERSIZE选项
  • git 落后主分支提交
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 08.Android之View事件问题
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • java取消线程实例
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • JS字符串转数字方法总结
  • Python学习之路16-使用API
  • ReactNativeweexDeviceOne对比
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Yeoman_Bower_Grunt
  • 规范化安全开发 KOA 手脚架
  • 离散点最小(凸)包围边界查找
  • 我感觉这是史上最牛的防sql注入方法类
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一个完整Java Web项目背后的密码
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (16)Reactor的测试——响应式Spring的道法术器
  • (Note)C++中的继承方式
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转载)Google Chrome调试JS
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net framework profiles /.net framework 配置
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 发送邮件
  • .NET 设计模式初探
  • .Net多线程总结
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ 物联网 ]拟合模型解决传感器数据获取中数据与实际值的误差的补偿方法
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [CSS3备忘] transform animation 等
  • [github配置] 远程访问仓库以及问题解决