vue事件發射與接收(可實現頁面傳值和非父子元件傳值)
阿新 • • 發佈:2018-12-30
vue2.0中可以使用 $emit, $on, $off 分別來分發、監聽、取消監聽事件。
1).給data新增一個 名字為eventhub 的空vue物件,就可以在任何元件都可以呼叫事件發射接收的方法了,在main.js中新增:
new Vue({ el: '#app', router, data: { eventHub: new Vue() }, render: h => h(App), components: { App }, template: '<App/>' })
2).在home元件內呼叫事件接受引數($on監聽)
mounted(){
this.$root.eventHub.$on('事件名稱', (data)=>{
console.log('接受到的引數:'+data)
} )
},
3)在adress元件內呼叫事件觸發 ($emit分發)
//通過this.$root.eventHub獲取此物件
this.$root.eventHub.$emit('事件名稱', '這裡是引數,選中後的地址')
4). 在home元件中銷燬($off取消)
beforeDestroy () {
this.$root.eventHub.$off('事件名稱')
},
注:只要this.$root.eventHub.$off('事件名稱')取消了事件,發現再次呼叫this.$root.eventHub.$on監聽時不起作用了,不明白為什麼?如果不取消監聽就會監聽幾遍就會呼叫幾遍方法,顯然不合理,本人只是在專案中不讓其取消監聽的情況下做了次判斷,讓this.$root.eventHub.$on只走一次,不明所以然!希望哪位大神指出錯誤!!!