vue 朝花夕拾系列(6)主要收录的就是vue组件间通信的几种方式,如
1.props、$emit/$on
2.vuex
3.$parent/$children
4.$refs
5.$root
6.$attrs/$listeners
7.provide/inject
8.中央事件bus(eventBus)
9.路由传参
本文主要阐述第六种:通过$attrs/$listeners获取没有在组件props属性中声明的属性和绑定在组件上的事件对象的方式完成数据通信…
$attrs/$listeners
$attrs
$attrs传值时是不会传递class和style以及已经被props接收的值的
场景:如果父传子有很多值,那么在子组件需要定义多个 props
解决:attrs获取子传父中未在 props 定义的值
- father ===> child ===> grand-child 这种组件props下发
- 通过在child组件中定义需要给child组件的width属性
- $attrs就剩下需要传给grand-child孙子组件的数据
- 没有定义native的非原生事件会被$listeners层层传递
1 | // 父组件 |
- 相对应的如果子组件定义了 props,打印的值就是剔除定义的属性
1 | // child组件 |
$listeners
$listeners里存放的是父组件中绑定的非原生事件
- 使用.native修饰符的事件,不会体现在$listeners属性上。
1 | // father组件(App.vue) |