Vue 组件间的通讯

首先我们可以先看下 vue2.0 的官方文档:

https://cn.vuejs.org/v2/api/

一、首先是父组件传给子组件
新建一个 startVue_1 组件

1
2
3
4
5
6
7
8
9
10
11
12
var startVue_1 = new Vue({
el:'#container-1',
data:{
g3:'3'
},
components: {
'lchild':{
props:['papa'],
template:"<input class = 'input' v-model='papa' type='text' placeholder='我局部子组件'></input>"
}
},
});

在标签处要绑定需要传的值的名字

1
2
3
<div class = 'container' id='container-1'>
<lchild :papa='g3'></lchild>
</div>

这样 lchild 这个组件就接收到了名为’papa‘的从父组件传过来的值,并绑定;

二、子组件传给父组件

修改一下代码:
vue2.0 严禁子组件直接修改父组件的值,这里通过 emit 事件的方式传值通知父组件值修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var startVue_1 = new Vue({
el:'#container-1',
data:{
g3:'3'
},
components: {
'my-component': board,
'lchild':{
props:['papa'],
data:function(){
return {
g6:'6'
}
},
template:"<input class = 'input' v-model='g6' @blur='backData' placeholder='我局部子组件'></input>",
methods: {
backData:function(){
// 派发事件 back,在父组件处接收
this.$emit('back',this.g6)
}
}
}
},
methods:{
// 接收到back事件执行setD
setD:function(e){
this.g3 = e
}
}
});

然后在父组件处监听事件:

1
2
3
<input v-model='g3' placeholder='我是直接写出来的' class = 'input'>

<lchild @back='setD'></lchild>

执行,结果正常:
comm.gif

三、子组件与子组件之间的通讯

这里只是简单地结合一二,把值传给父组件,再把值传给另外一个子组件

1
2
3
4
Vue.component('gchild',{
template:"<div class = 'inputItem'><h4>全局:</h4><input class = 'input' type='text' v-model='data' placeholder='我全局子组件'></input></div>",
props:['data']
})

在标签处绑定:

1
<gchild :data='g3'></gchild>

comm-1.gif

四、两个不同实例的传值

其实这个最简单,和普通的对象传值一样,直接拿到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var startVue_1 = new Vue({
el:'#container-1',
data:{
g3:'3'
}
})

var startVue_2 = new Vue({
el:'#container-2',
data:{
// 这样就拿到了startVue_1的g3的值
g2:startVue_1.$data.g3
}
})