Попытка захватить события на vue.js 2, но безуспешно

У меня проблема с захватом событий с помощью vue.js 2. Я использую шину событий для генерации и захвата события.

В этом блоке кода я написал функцию, которая будет генерировать событие:

getLevelItems(parent) {
    this.$bus.$emit('get-level-items',{level: 'third', parent: parent})
},

В этом другом блоке я фиксирую событие:

mounted() {
      this.$bus.$on('get-level-items', (obj) => {
        if (obj.level === 'third' && obj.parent === this.parent) {
          if (this.itemsNotFilled){
            this.getAllCategories(this.parent)
          }
        }
      })
    },

Хорошо, чтобы вызвать событие нажатием кнопки, оно работает нормально, но если я хочу отправить событие в другой момент, например, после ответа на запрос, событие будет отправлено, но не будет захвачено.

prepareData(data) {
        _.forEach(data, (value) => {
          value.selected = this.categories.includes(value._id) ? true : false
          value.show = this.categories.includes(value._id) ? true : false
          if (value.show){
            this.getLevelItems(value._id)
          }    
        })
        return data
      },

Eventbus.js

import Vue from 'vue'

const bus = new Vue()

export { bus }

export default function install (Vue) {
  Object.defineProperty(Vue.prototype, '$bus', {
    get () {
      return bus
    }
  })
}

person Daniel Cintra    schedule 05.07.2018    source источник
comment
Судя по тому, как читается ваш код, похоже, что вы прикрепили bus в качестве плагина к экземпляру Vue. А ты?   -  person Derek Pollard    schedule 05.07.2018
comment
да, я подключил шину как плагин.   -  person Daniel Cintra    schedule 05.07.2018
comment
пожалуйста, предоставьте также этот код   -  person Derek Pollard    schedule 05.07.2018
comment
Кроме того, вместо использования шины событий может быть проще использовать vuex.   -  person Derek Pollard    schedule 05.07.2018
comment
да, в im using vuex to other things, but for this i think its нет необходимости, потому что это слишком просто ... и должно работать.   -  person Daniel Cintra    schedule 05.07.2018
comment
Можете ли вы увидеть, что событие запускается в ваших инструментах vue dev?   -  person Derek Pollard    schedule 05.07.2018
comment
да, событие запускается, но захват не выполняется.   -  person Daniel Cintra    schedule 05.07.2018
comment
А как насчет Vue.prototype. $ Bus = new Vue () в main.js?   -  person Vladislav Ladicky    schedule 06.07.2018


Ответы (1)


Попробуйте использовать nextTick:

`mounted() { 
    this.$nextTick(function () {
        this.$bus.$on('get-level-items', (obj) => {
            if (obj.level === 'third' && obj.parent === this.parent) {
                if (this.itemsNotFilled) {
                    this.getAllCategories(this.parent)
                }
            }
         })
      })
  }`
person Iago Cavalcante    schedule 05.07.2018