Невозможно использовать $off и передавать параметры в eventbus в Vue

В main.js я создал eventBus

Vue.prototype.$eventHub = new Vue()

И в компоненте 1

this.$eventHub.$emit('logged-in')

В component2 я попробовал это

  beforeMount () {
     this.$eventHub.$on('logged-in', function () {
       console.log("logged in")
     })
   },
   beforeDestroy() {
     this.$eventHub.$off('logged-in')
   }

Он не печатает ничего в консоли. Если я удалю this.$eventHub.$off('logged-in') он работает нормально, но выполняется столько раз, сколько$emit выполнен. Что я здесь не так делаю? Зачем $off не работает?

Невозможно передать параметры, пытаясь отправить сообщение, используя $emit

this.$eventHub.$emit('logged-in', "some message")

в $on

this.$eventHub.$on('logged-in', this.testEvent)

Метод тестового события выглядит

    testEvent (params) {
      console.log(params)
    }

Параметры показывают неопределенные.

Но если я делаю это, он работает нормально

        this.$eventHub.$on('logged-in', (params) => {
          console.log(params)
        })

Как я могу передать параметры в метод?

1 ответ

Вы должны передать ссылку на $off

beforeMount () {
 this.$eventHub.$on('logged-in', this.onEventHandler)
},
beforeDestroy() {
 this.$eventHub.$off('logged-in', this.onEventHandler)
},
methods: {
  onEventHandler () {
    console.log("logged in")
  }
}
Другие вопросы по тегам