vue2-组件通信

623 阅读2分钟

一、 父子组件通信

  1. 父组件向子组件传递参数

父组件使用v-bind动态绑定props值,子组件props选项声明从父组件接收的数据

//父组件
<set-components :title="xxx" />

props接参方式:
(1) props数组接收多个父组件传递的参数

//子组件

porps:['title','size','color']

(2)props对象接收多个父组件传递的参数,可以设置数据验证

//子组件
props:{
    propsA:Number,  //必须是数字型
    propsB:[Number,String],  //必须是数字型或字符型
    propsC:{  //必须是布尔型,默认值为true
        type:Boolean,
        default:true
    },
    propsD:{  //必须是数字型,必传
        type:Number,
        required:true
    },
    propsE:{  //必须是数组型。当类型是数组或对象时,默认值必须通过函数返回
        type:Array,
        default:function(){
            return [];
        }
    },
    propsF:{  //自定义验证函数
        validator:function(value){
            return value>10
        }
    }
}
  1. 子组件向父组件传递参数

子组件触发自定义事件$emit(事件,参数)

$emit(event,...args)

父组件监听事件方式:
(1)通过v-on监听事件

<set-components @event='getchange' />

通过函数getchange形参接收子组件传递的参数

(2)$once监听事件

在父组件通过$once(event,callback)进行对$emit触发的事件进行监听。特点是触发后,清除$once监听方法,只会触发一次。

(3)$on监听事件
在父组件通过$on(event,callback)进行对$emit触发的事件进行监听。特点是触发后,不会清除$on监听方法,需要在想要清除$on监听方法时,手动清除$on方法,使用$off方法进行清除。需要$on$off搭配使用。

$off(event,callback)

  • 没有提供event,清除所有事件监听
  • 提供event,清除event监听
  • 提供event和callback,清除callback监听
  1. ref

通过$refs可以获取子组件的数据,只有组件渲染后填充$refs,不能做到响应式

  1. $parent$children

子组件通过$parent访问所有父组件
父组件通过$children访问所有子组件

二、兄弟组件通信

父级中使用两个兄弟组件,子组件a和子组件b,分别监听获取a和b传递到父组件的参数,然后将a的参数传递给b的props值,b的参数传递给a的props值。父组件起到了中间传递作用,实现了兄弟组件的通信

三、全局通信

  1. vuex进行全局管理和使用
  2. 通过bus全局vue,进行数据的全局通信
    (1)定义全局bus变量vue实例对象。
bus=new vue()

(2)组件中通过bus进行$once,$on,$off,$emit的使用,通过自定义事件传参。

bus.$once
bus.$on
bus.$off
bus.$emit