vue组件12种通信方式

Vue3 的 8 种组件通信

  1. props
  2. $emit
  3. expose / ref
  4. $attrs
  5. v-model
  6. provide / inject
  7. Vuex
  8. mitt

Vue2.x 的12种组件通信

  1. props
  2. $emit / v-on
  3. .sync
  4. v-model
  5. ref
  6. $children / $parent
  7. $attrs / $listeners
  8. provide / inject
  9. EventBus
  10. Vuex
  11. $root
  12. slot

父子组件通信可以用:

  • props
  • $emit / v-on
  • $attrs / $listeners
  • ref
  • .sync
  • v-model
  • $children / $parent

兄弟组件通信可以用:

  • EventBus
  • Vuex
  • $parent

跨层级组件通信可以用:

  • provide/inject
  • EventBus
  • Vuex
  • $attrs / $listeners
  • $root

Vue通信使用写法

父向子传递数据 常用的就是props
子组件接收到数据之后不能直接修改父组件的数据, 当父组件重新渲染时 数据会被覆盖 .
如果子组件内要修改的话用computed比较好
prop 只可以从上一级组件传递到下一级组件(父子组件),也就是单向数据流。而且 prop 只读,不能被修改

.sync
父组件向子组件传递数据的双向绑定 子组件接收到的数据可以直接修改 并且会同时修改父组件的数据
vue3中删除了.sync的使用

v-model
和.sync类似 可以实现将父组件传给子组件的数据为双向绑定, 子组件通过$emit修改父组件的数据

ref
ref如果在普通的DOM元素上 指向的就是该DOM元素
如果在子组件上, 引用的指向就是子组件实例, 父组件就可以通过refs主动获取子组件的属性或者调用子组件的方法

$emit / v-on
子组件通过派发事件给父组件数据, 或者触发父组件更新等操作
$emit()——把事件沿着作用域链向上派送
v-on 指令是事件绑定指令,当用户需要点击,按下键盘,滚动鼠标等操作时,想要添加一些自己的逻辑处理时,就可以为特定的元素绑定一些特定的事件

$attrs / listeners
多层嵌套组件传递数据 如果只是传递数据,而不做处理的话就用这个

a t t r s : 包括父作用域里面除了 c l a s s 和 s t y l e 除外的非 p r o p s 属性集合 . 通过 t h i s . attrs : 包括父作用域里面除了class 和 style 除外的非props属性集合. 通过this. attrs:包括父作用域里面除了classstyle除外的非props属性集合.通过this.attrs获取父作用域中所有符合条件的属性集合 然后继续传给子组件内部其他的组件 就可以通过v-bind = “$linteners”
l i s t e n e r s : 包括了父作用域里 . n a t i v e 除外的监听事件集合 . 如果还要传给子组件内部的其他组件 , 可以通过 v − o n = ′ listeners: 包括了父作用域里 .native除外的监听事件集合. 如果还要传给子组件内部的其他组件, 可以通过v-on = ' listeners:包括了父作用域里.native除外的监听事件集合.如果还要传给子组件内部的其他组件,可以通过von=linteners’

$children / $parent
$children : 获取到所有只包含子组件的VueComponent对象数组, 可以直接拿到子组件中所有的数据和方法等 不包括孙组件
$parent : 获取到一个父节点的VueComponent对象, 同样包含父节点中所有数据和方法等

provide / inject
provide / inject 为依赖注入 , 不推荐直接用于应用程序代码中, 但是在一些插件或组件库里 被常用 避免重复声明props
provide : 可以让我们指定想要提供给后代组件的数据或方法
inject : 在任何后代组件中接收想要添加在这个组件上的数据或方法, 不管组件嵌套多深都可以直接用
这两个传递的数据不是响应式的

EventBus
EventBus 是事件总线, 不管是父子组件 ,兄弟组件 , 跨层级组件等都可以使用它完成通信操作

Vuex
Vuex是状态管理器, 集中式存储管理所有组件的状态.

$root
$root 可以拿到APP.vue里面的数据和方法
访问跟组件的属性和方法: $root 只是对根组件有用, 不是父组件, $root 只是对根组件有用

slot
slot就是把子组件的数据通过插槽的方式传给父组件使用, 然后在插回来 就是用来占个坑使用时候将组件之间的内容用来填坑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值