1. 程式人生 > >vue事件發射與接收(可實現頁面傳值和非父子元件傳值)

vue事件發射與接收(可實現頁面傳值和非父子元件傳值)

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只走一次,不明所以然!希望哪位大神指出錯誤!!!