bus:
/vue原型鏈掛載總線
Vue.prototype.bus = new Vue();
//子組件發送數據
this.bus.$emit("change",data);
//子組件接收數據
this.bus.$on("change",function(data){
})
vue中$emit與$on
var Event = new Vue(); 相當於又new了一個vue實例,Event中含有vue的全部方法;
Event.$emit('msg',this.msg); 發送數據,第一個參數是發送數據的名稱,接收時還用這個名字接收,第二個參數是這個數據現在的位置;
Event.$on('msg',function(msg){ 接收數據,第一個參數是數據的名字,與發送時的名字對應,第二個參數是一個方法,要對數據的操作
/這裏是對數據的操作
})
下面我們看一個例子
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="utf-8" />
5 <title>孫三峯--博客園</title>
6 <script type="text/javascript" src="js/vue2.0.3.js" ></script>
7 <script type="text/javascript">
8 //準備一個空的實例對象
9 var Event = new Vue();
10 var A={
11 template:`
12 <div style="border: 1px solid red; margin-bottom: 10px; width: 300px;">
13 <h4>A組件</h4>
14 <p>{{a}}</p>
15 <input type="button" value="把A數據給C" @click="send" />
16 </div>
17 `,
18 data(){
19 return {
20 a:'我是A裏面的數據'
21 }
22 },
23 methods:{
24 send(){ //A發送數據
25 Event.$emit('a-msg',this.a);
26 }
27 }
28 };
29 var B={
30 template:`
31 <div style="border: 1px solid green; margin-bottom: 10px; width: 300px;">
32 <h4>B組件</h4>
33 <p>{{b}}</p>
34 <input type="button" value="把B數據給C" @click="send" />
35 </div>
36 `,
37 data(){
38 return {
39 b:'我是B裏面的數據'
40 }
41 },
42 methods:{
43 send(){
44 Event.$emit('b-msg',this.b);
45 }
46 }
47 };
48 var C={
49 template:`
50 <div style="border: 1px dotted green; margin-bottom: 10px;width: 300px;">
51 <h4>我是C組件,我在坐等接收數據</h4>
52 <p>{{a}}</p>
53 <p>{{b}}</p>
54 </div>
55 `,
56 data(){
57 return{
58 a:'',
59 b:''
60 }
61 },
62 mounted(){ //兩種接收的方式
63 var _this = this;
64 Event.$on('a-msg',function(a){
65 _this.a=a;
66 });
67 Event.$on('b-msg',function(b){
68 this.b = b;
69 }.bind(this))
70 }
71 };
72 window.onload=function(){
73 new Vue({
74 el:'#box',
75 data:{
76
77 },
78 components:{
79 'com-a':A,
80 'com-b':B,
81 'com-c':C
82 }
83 })
84 }
85 </script>
86 </head>
87 <body>
88 <div id="box">
89 <com-a></com-a>
90 <com-b></com-b>
91 <com-c></com-c>
92 </div>
93 </body>
94 </html>
顯示效果