Vue.js 中v-on自定义事件不是很理解!

我在官网中看到使用 $on来监听事件,$emit触发事件。但是下面这句话我不是很理解,父组件可以在使用子组件的地方直接用v-on来监听子组件触发的事件。

<div id="counter-event-example">
  <p>{{ total }}</p>
  <button-counter v-on:increment="incrementTotal"></button-counter>
  <button-counter v-on:increment="incrementTotal"></button-counter>
</div>

Vue.component('button-counter', {
  template: '<button v-on:click="increment">{{ counter }}</button>',
  data: function () {
    return {
      counter: 0
    }
  },
  methods: {
    increment: function () {
      this.counter += 1
      this.$emit('increment')
    }
  },
})
new Vue({
  el: '#counter-event-example',
  data: {
    total: 0
  },
  methods: {
    incrementTotal: function () {
      this.total += 1
    }
  }
})

这是官网的例子,v-on:increment='incrementTotal' 这句话我的理解是如果increment触发的话,就会触发incrementTotal 但是总感觉不对,请问各位 应该怎样理解?

阅读 6.2k
3 个回答

v-on:increment='{回调函数}', button 点击触发 button-counter 的 increment 事件,在父级监听到 increment 事件被触发后调用回调函数。

父组件监听increment事件(自定义)然后触发incrementTotal方法,而子组件点击事件触发increment方法,该方法用emit触发increment事件,这个事件被父组件监听到了,总感觉哪里不对 是不是因为好多个increment?

你用DOM中的冒泡去类比理解就清楚了 子元素触发事件会向上冒泡,父元素监听这个事件。也有机会去处理这个事件。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题