# Vue2父子通信方式大全 **Repository Path**: szxio/vue2communications ## Basic Information - **Project Name**: Vue2父子通信方式大全 - **Description**: 演示了几种vue2中的父子组件通信的几种方式,涵盖了开发中常用的几种方法 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-08-10 - **Last Updated**: 2023-09-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: Vue ## README ## Vue2父子传参:props 首先在父组件中引入子组件,然后以属性的方式将数据传递给子组件 父组件: ```vue ``` 然后在子组件中使用props接收,props里定义的名字要和父组件定义的一致 子组件: ```vue ``` ## Vue2父子传参之父传子:$refs 在父组件中给子组件的标签上添加 ref 等于一个变量,然后通过使用 $refs 可以获取子组件的实例,以及调用子组件的方法和传递参数 父组件: ```vue ``` 然后在子组件中定义相同的方法名,在父组件使用 `$refs` 调用后或触发在子组件定义的方法 子组件: ```vue ``` ## Vue2父子传参之子传父:$emit 在子组件中我们也可以调用父组件的方法向父组件传递参数,通过`$emit`来实现 子组件: ```vue ``` 然后在父组件中定义并绑定子组件传递的 `setValueName` 事件,事件名称要和子组件定义的名称一样 父组件: ```vue ``` ## Vue2父子传参:parent/children - 父组件通过`$children`获取子组件的实例数组 - 子组件通过`$parent`获取的父组件实例 父组件中可以存在多个子组件,所以`this.$children`获取到的是子组件的数组 父组件: ```vue ``` 子组件: ```vue ``` ## Vue2兄弟传参:bus.js 首先新建 `bus.js` 文件,初始化如下代码: ```js import Vue from 'vue' export default new Vue() ``` 然后在需要通信的组件中都引入该 `bus` 文件,其中一个文件用来发送,一个文件监听接收。派发事件使用 `bus.$emit`。 下面组件派发了一个叫`setYoungerBrotherData`的事件 ```vue ``` 在另一个页面中使用 `bus.$on('setYoungerBrotherData',()=>{})` 监听 ```vue ``` ## Vue2跨级传参:provide/inject `provide`和`inject`是`vue`生命周期上的两个函数,这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在其上下游关系成立的时间里始终生效。 提示:`provide` 和 `inject` 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。 祖先组件: ```vue ``` 孙子组件: ```vue ``` 使用 `provide/inject`的好处是父组件不需要知道是哪个自组件使用了我的数据,子组件也不需要关心数据从何而来 ## 总结 - 父子通信:父向子传递数据通过`props`,子向父传递数据通过`$emit`事件,父链子链使用`$parent/$children`,直接访问子组件实例使用`$refs` - 兄弟通信:`bus,Vuex` - 跨级通信:`bus,Vuex,provide/inject`