这里介绍常用的三种组件通信的方式。
一、 父组件向子组件传数据,这种情况多用于由父组件收集获取数据,传递给子组件,子组件根据数据形成相应的展示样式。
举例: parent.vue
点击(此处)折叠或打开
-
<children :data='mess'></children> 对子组件的引用,将数据mess传输给子组件children中的data变量
-
-
data() {
-
return {
-
mess: {
-
'label': 'label',
-
'value': 'value'
-
}
-
}
- }
点击(此处)折叠或打开
- children.vue
- {{ mess.label }}
-
{{ mess.value }}
-
-
props : {
-
data: { 定义接受数据 data的数据类型和默认值 接收值都定义在props
-
type: Object,
-
default: {
-
'label': 'label1',
-
'value': 'value1',
-
}
-
}
- }
二、子组件向父组件传数据,通过触发事件向父组件发送数据,多用于检索,查询
parent.vue
点击(此处)折叠或打开
-
<children @childrenclickQuery=ParentclickQuery></children> 父组件调用子组件,定义ParentclickQuery函数
-
-
ParentclickQuery(data) {
-
this.msg = data // data就是子组件传递的数据 data = {'label': 'label','value': 'value'}
- }
点击(此处)折叠或打开
-
children.vue
-
-
<button @keyup.enter.native=clickQuery>传递参数</button> 定义按钮事件名为 clickQuery
-
-
data() {
-
return {
-
msg: {
-
'label': 'label',
-
'value': 'value'
-
}
-
}
-
}
-
clickQuery() {
-
this.$emit('childrenclickQuery', this.msg) // 触发当前组件事件,并传递参数, 触发父组件中的 childrenclickQuery事件,同时为事件传递参数,父组件中通过事件接受参数
- }
三、兄弟组件之间传参数, 当组件之间互不调用,但是却要传参数的情况, 一般多在两个组件同属一个父组件
原理: 通过第三方实, 组件接收方开启监听事件,组件发送方触发事件,触发时带上参数。必须同一个vue实例才能进行监听和触发。
这时候需要实例化一个三方vue实例进行传输 let vm = new Vue()
传数据组件方
点击(此处)折叠或打开
-
<button @click=ge></button> //
-
-
methods: {
-
ge() {
-
vm.$emit('blur','messages1') // 组件触发 触发blur事件,带上参数messages1
-
}
- }
接受数据组件
点击(此处)折叠或打开
-
-
created() {
-
vm.$on('blur',(arg) => { // 新建一个监听事件 blur,接受一个参数args并获取, 必须在事件触发前开启监听,这里放在实例创建时启动监听
-
this.test = arg // arg 就是 messages1
-
})
- }
以上就是vue常用的三种组件之间通信的情况。