非父子之間的組件傳值,可以使用vuex。簡單的狀態管理,也可以用vue bus
vue bus可以實現不同組件間、不同頁面間的通信,比如我在A頁面出發點擊事件,要B頁面發生變化,使用方法如下:
全局定義:main.js
window.eventBus = new Vue()
在A頁面的事件中觸發:
eventBus.$emit('todo', '123')
在B頁面的created中開始監聽,越早監聽越好:
eventBus.$on('todo', (params) => {
console.log(params)
})
下面我來一個例子
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>非父子組件傳值(bus/總線/發布訂閱模式/觀察者模式)</title>
<script src="./vue.js"></script>
</head>
<body>
<div id="app">
<child content="Dell"></child>
<child content="Lee"></child>
</div>
<script>
Vue.prototype.bus = new Vue();
Vue.component('child',{
data:function(){
return {
selfContent:this.content
}
},
props:{
content:String
},
template:'<div @click="handleClick">{{selfContent}}</div>',
methods:{
handleClick:function(){
//由於bus是vue的一個實例,所以它有$emit這個方法,change就是一個隨意的名字,可以改成aaa
this.bus.$emit('change',this.selfContent)
}
},
mounted:function(){
var this_= this;
this.bus.$on("change",function(msg){
this_.selfContent=msg;
})
}
})
var vm= new Vue({
el:'#app',
data:{},
methods:{
},
})
</script>
</body>
</html>
當然也可以參考一些其他人的博客,注意理解
https://www.jianshu.com/p/5b383e66c117
http://www.cnblogs.com/fanlinqiang/p/7756566.html
