前言

我们通常会把整个页面被分成小组件,这些组件有自己的功能和 UI。 有时,我们需要一种方法来在这些组件之间进行通信。
我们可以使用 Vuex(状态管理工具)来存储数据并跨组件使用。 但有时,我们需要一种方法将数据从一个组件发送到另一个组件,而无需使用 Vuex 存储。
请看下面

共有五种方法可以进行通信

1、使用Props (父组件通信子组件)

2、使用Events 事件(子组件通信父组件)

3、使用Event Bus 事件总线(父通信子,子通信父)

4、使用provide/inject 提供和注入对(父组件通信子组件)

5、使用this.$refs (子组件通信父组件)

第一种:Props

[父到子]使用Props可以将我们需要传输的数据从父组件传递到子组件。下面我们将使用props从parent.vue发送数据到child.vue

<!-- child.vue 代码 -->
<template><div>{{message}}</div>
</template><script>
export default {name: "child",props: ['message'] // 定义一个名为message的变量,在页面进行渲染
}
</script>
<!-- parent 组件 代码 -->
<template><div><!-- 使用子组件 child,绑定一个参数,参数名为message,值为当前组件变量名为message的值--><child :message="message"/>  </div>
</template><script>
import Child from "./child"; <!-- 使用子组件 -->export default {name: "parent",components: {Child},data() {return {message: '我是父类的数据'}}
}
</script>

第二种:Events

[子到父]通过子组件触发事件将数据发送到父组件,父组件使用v-on进行捕获,捕获时需要和发送事件同名,还可以检索参数

this.$emit(‘事件名’, args1, args2, args3,…) 就是一种触发事件的方法

<!-- child 子组件 代码 -->
<template><div><div @click="sendMessageToParent"></div></div>
</template><script>
export default {name: "child",message: "数据",methods: {sendMessageToParent() {// 点击后触发一个事件  事件名为childSuccess,参数为messagethis.$emit("childSuccess", this.message);}}
}
</script>
<!-- parent 父组件 代码 -->
<template><div><!-- 使用子组件 监听事件名为childSuccess的事件,一旦监听到后触发getData方法--><child @childSuccess="getData"/></div>
</template><script>
import Child from "./child";
export default {name: "parent",components: {Child},methods: {getData(_val) {// _val 就是子组件的事件携带的参数console.log(_val)}}
}
</script>

第三种:Event Bus

[父到子,子到父]当两个需要互相通信的组件不存在父子关系的时候,需要手动去监听组件上的事件的时候,就可以使用此方法(事件总线)。所以事件总线用于在任何两个组件之间进行通信(组件不需要具有父子关系)。

操作方法: 在一个组件使用this. r o o t . root. root.emit(‘事件名’,args1,args2,args3,…); 在另一个组件中使用this. r o o t . root. root.on(‘相同的事件名’,args1,args2,args3,…)

<!--component_one 组件 监听事件-->
<template>
</template><script>
export default {name: "component_one",mounted() {this.$root.$on("success", (msg) => {console.log(msg)})}
}
</script>
<!--component_two组件 发布事件-->
<template><div @click="sendMessageToComponentOne"><router-link to="/component_one">点我!</router-link></div>
</template><script>
export default {name: "component_two",methods: {sendMessageToComponentOne() {let msg = '你好呀!';this.$root.$emit("success",msg)}}
}
</script>

第四种:provide/inject

[父到子]此类主要是用于更深层嵌套组件的结构,使用这种方式可以更快捷更方便,且子孙后代后可以使用inject

<!-- parent 父组件 -->
<template><child />
</template><script>
import Child from "./child";
export default {name: "parent",components: {Child},provide() {return {"eventName": "参数"}}
}
</script>
<!-- child 子组件 -->
<template><div>{{eventName}}</div>
</template><script>
export default {name: "child",inject: ['eventName'],}
</script>

第五种:this.$refs

[子到父]一般都不推荐使用此种方法进行数据通信。 使用这种方式的时候,我们需要为子组件一个引用id

<!-- child 子组件 -->
<template>
</template><script>
export default {name: "child",data() {return {value: '你好呀!'}}
}
</script>
<!-- parent 父组件 -->
<template><child ref="child"/>
</template><script>
import Child from "./child";
export default {name: "parent",components: {Child},data() {return {message: null}},mounted() {// 获取子组件上的value值this.message = this.$refs.child.value;}
}
</script>

Vue组件通信的五种方法相关推荐

  1. Vue组件通信的五种方式

    Vue组件通信的五种方式 文章目录 Vue组件通信的五种方式 一. props/$emit(父子通信) 二. vuex(组件之间通信) 三. 事件总线EventBus(组件之间通信) 四. provi ...

  2. vue组件通信的几种方法

    vue中我们最常使用的就是父子之间的通信还有全局数据管理vuex了,下面粗略说一下vue组件通信的几种方法 组件通信的几种方式 1.父子组件通信 2.兄弟组件通信 3.跨多层级组件通信 4.任意组件( ...

  3. vue 组件通信的几种方式

    前言 在vue中,​ 组件的关系不外乎以下三种: 组件是需要通信的,在开发中,常用到的通信方式有:vuex.eventBus.以及props与emit.$parent与$children,除此之外,还 ...

  4. vue组件通信的几种方式

    vue组件通信的几种方式 最近用vue开发项目,记录一下vue组件间通信几种方式 第一种,父子组件通信 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Chil ...

  5. Vue组件传值的三种方法

    Vue组件传值的三种方式 1.父传子 父传子使用props: 1.父组件:即在使用的子组件标签上,自定义一个绑定数据,这里我使用的是"mymsg",将父组件的msg绑定在其上. 2 ...

  6. vue组件通信的八种方式

    一.props / $emit 父组件通过props的方式向子组件传递数据,而通过$emit 子组件可以向父组件通信. 1. 父组件向子组件传值 下面通过一个例子说明父组件如何向子组件传递数据:在子组 ...

  7. vue组件之间传值几种方法

    方法一.父子组件传值 通过props向下传递 父组件 <div class="menu_header"><Menu :msgChild="msg1&qu ...

  8. Vue组件通信的7个方法

    1.props和$emit 父组件向子组件传递数据是通过prop传递的,子组件传递数据给父组件是通过$emit触发事件来做到的 Vue.component("child",{ da ...

  9. Vue组件通信——父子组件通信的四种方法

    引入组件 全局引入 在main.js文件中引入并注册 import ChildrenDemo from '@/views/components/ChildrenDemo' Vue.component( ...

  10. vue组件通信(传值)

    vue组件通信有以下几种方式可以实现(个人总结) 一.父组件到子组件传值方式: 一般通过在父组件中给子组件绑定属性的方式进行传值,子组件通过props来接收. 实例: //父组件 <templa ...

最新文章

  1. Django源码分析4:staticfiles静态文件处理中间件分析
  2. Codeforces 1016F Road Projects
  3. 网络知识科普 | 你未必了解的DNS
  4. Java定时任务以及ScheduledThreadPoolExecutor需要注意的问题
  5. spirng底层实现原理
  6. B00004 atoi函数
  7. [.Net] 一句话Linq(递归查询)
  8. Atitit 代码的导航 1.1.代码的层次导航 语句 函数方法 类 包 1.2.4.4. 代码可视化 流程图 一个方法内,多个代码行的关系图 语句to方法 2 1.3.4.5. 类图 类结构
  9. 关于在networkx中使用louvain算法报错的问题
  10. 自制EDL工程线进坚果R1手机9008端口刷机记录
  11. MapGIS出现“存储服务错误,可能未启动”问题解决方案
  12. 交换机设备登录账号权限1_h3c交换机设置用户权限
  13. 金属塑性成形计算机模拟仿真,金属塑性成形计算机模拟的若干进展
  14. 语音合成 GAN Vocoders 总览
  15. 小程序里长按微信公众号二维码跳转到公众号关注页
  16. swift和swiftui_SwiftUI和UIStackflow问题
  17. html 设置响应X-frame,X-Frame-Options(点击劫持)漏洞分析及web配置修复
  18. 微信小程序——消息推送配置
  19. 归一化处理matlab,MATLAB 中数据归一化处理
  20. Home Assistant入门1-1:在树莓派上安装官方系统

热门文章

  1. NLP_Paper:基于深度学习的异构时序事件患者数据表示学习框架
  2. Android技术堆栈积累
  3. 在vc6中使用access数据源的mfc程序
  4. vue-element项目实战之商品管理系统
  5. 算法递归——集合的全排列问题
  6. 如何获取SVG中g标签的宽高及位置坐标
  7. MySQL Inner Join 和 Left Join 详解
  8. 利用dxflib实现dxf文件的读写与可视化
  9. CCNA Security
  10. 【MDCC 2016】专访图灵机器人俞志晨:应用开发者生态是人工智能机器人发展的关键...