VueJS如何从方法而不是模板中侦听事件

时间:2017-03-29 11:40:13

标签: javascript vue.js vuejs2

我正在将一个子组件的事件发送给它的父母。我想通过父节点中的方法拦截信号。但是无论是否发出事件,监听功能始终触发。请注意,我使用的是单个文件组件和Vue-router。

另外,我发现很少有VueJS示例使用单个文件组件,对于noob,从一个文件中的简单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')
    }
  }

知道我做错了吗?

1 个答案:

答案 0 :(得分:6)

设置on事件的另一种方法是直接从您调用子组件的位置引用侦听器方法。

在您的父模板上,您可以执行以下操作:

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

methods上:

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