vue组件通信
2020-01-26 本文已影响0人
Poiey
组件之间的关系
- new Vue就可以看成根组件,每个文件的根组件是唯一的
- 其余的组件在注册(定义)的时候不能知道他们的关系的。只有在使用时才能知道。(例如:父子组件,兄弟组件等)
组件的通信
- 父到子的传递是通过props这个属性传递参数来实现
- 静态传值使用props传递
- 动态传值使用v-band来绑定数据,进行传值
- 通过$refs来进行传值,对子组件添加编辑ref
- 子到父的传递
- 通过this,$emit (‘自定义事件的名字’, 触发这个事件时传递过去的参数)
- 父组件收到子打来的事件的话,需要在调用儿子组件的时候,通过 v-on 去监听那个自定义事件
- 然后父组件就在那个事件处理函数中做需要做的事情
*注意:触发事件事如果携带了参数,那么在绑定事件时是通过event接收到的。 - 普通事件,event就是事件对象(事件后面没带( )默认是 event 事件)
- 自定义事件, $sevent就是传递过去的参数(带括号的)
- 兄弟关系
- 其余复杂关系
** 中央事件总线(bus)** ( 组件与组件之间传值 )
应用场景:在vue项目没那么庞大的时候使用,vue大型项目还是用vuex
第一步 : 新建一个Bus.vue 文件 ,这里主要是默认导出一个vue实例,
第二部 : 新建一个组件A import bus from 'Bus.vue' (导入) 这里通过 Bus.on 来接受传递过来的数据
const bus = new Vue();
非props特性
调用组件时传递的参数,如果在这个组件内部没有通过props选项去定义的话,那么这个Prop就叫做非props特性
非props特性的一 些规则:
1.会自动添加到组件的根元素上(继承)
2.普通的非Props特性都是替换,但class与style是拼接
3.禁用继承inheritAttrs class与style是禁用不了的设置 inheritAttrs = false
4.可以在组件内通过this.$attrs获取到非Props特性,class与style不在此列