vue 已经成为当下最热的前端框架之一,在学生的面试过程中最常问的问题非组件通讯莫属了。
下面我将会详细介绍 vue 当中,组件通讯的几种方式,以及表达技巧。
为什么需要组件通讯?
vue 是组件化开发,我们项目代码中的各个模块都是通过组件组合而成,而且组件之间的参数都会有相互依赖的关系,所以我们需要熟练掌握组件通讯
组件通讯的分类:
- 父子组件
- 同级组件
- 跨域组件
1、父子通讯:
父组件向子组件 Child 传递参数:
- attr1 静态传参
- arr2 动态传参
1 | <template> |
子组件:
子组件通过 props 来获得父组件传递的参数
- 数组 简单
- 对象 完整
1 | <template> |
子父通讯
1 | 子: this.$emit('事件名',"任意数据类型的值") |
父组件-子组件传递一个函数,子组件调用父组件传递过来的函数,传入参数,父组件传递的这个函数就可以通过回调形参,拿到子组件传递的参数
跨级通讯
- Vue v2.2 新增 provide/inject
父组件
1 | <template> |
子组件
1 | <template> |
- Vue v2.4 新增 $attrs
想要使用$attrs 在父组件中不可以通过 props 去定义
祖先组件:
1 | <template> |
父组件 - Parent:
1 | <template> |
子组件:
1 | <template> |
EventHub & EventBus
由于 vue 原生支持发布、订阅模式,我们通过 new Vue() 创建新的实例。
utils/hub.js
1 | import Vue from "vue"; |
main.js
1 | import Vue from "vue"; |
1 | 组件内部: |
Vuex
I'm so cute. Please give me money.
- Post link: https://blog.gaocaipeng.com/2020/06/03/zyn00n/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.