VueJS, как прослушивать событие из метода, а не из шаблона

Я отправляю событие от дочернего компонента к его родителю. Я хочу перехватить сигнал через метод родителя. Но функция прослушивания срабатывает всегда, независимо от того, было ли сгенерировано событие. Обратите внимание, что я использую отдельные файловые компоненты и Vue-router.

Кроме того, я обнаружил, что очень мало примеров VueJS используют отдельные файловые компоненты, и для новичка транспиляция из простого приложения Vue в одном файле в несколько отдельных файловых компонентов может сбивать с толку.

Родитель:

<template>
 ....html here
</template>
<script>
  import Child from './Child.vue'

  export default {
  name: 'Parent',
  data () {
    return {
     stage: 1
    }
  },
  components: {
    Child
  },
  created: function () {
    // the following line always runs even when listen for non-existent event eg this.$on('nonsense'...)
    this.$on('child-event', this.stage = 2)
  }
  }

ребенок:

<template>
  <button v-on:click="sendEvent" type="button" class="btn btn-success">Next</button>
</template>

<script>
  export default {
  name: 'Child',
  data () {
    return {
      response_status: 'accepted'
    }
  },
  methods: {
    sendEvent: function () {
      this.$emit('child-event', 'accepted')
    }
  }

Любая идея, что я делаю неправильно?


person Don Smythe    schedule 29.03.2017    source источник
comment
Пример нескольких файлов и шаг сборки — github.com/jonataswalker/vue-rollup-example< /а>   -  person Jonatas Walker    schedule 29.03.2017


Ответы (1)


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

В вашем родительском шаблоне вы можете сделать что-то вроде:

<Child v-on:child-event="eventIsEmitted"></Child>

На вашем methods:

eventIsEmitted: function(status) {
    if (status == 'accepted') {
        this.stage = 2;
    }
}
person SUB0DH    schedule 29.03.2017