事件

组件与其祖先/后代通信的方式之一是通过自定义通信事件。所有 Vue 实例也是发射器并实现自定义事件接口,以促进组件树内的通信。我们可以使用以下内容:

  • $on:听取这些组件祖先或后代发出的事件。
  • $broadcast:发出一个向下传播给所有后代的事件。
  • $dispatch:发出一个事件,该事件首先在组件本身上触发,然后向上传播到所有祖先。
  • $emit:触发自我事件。

例如,我们希望在表单提交时隐藏表单组件内的特定按钮组件。在父元素上:

var FormComponent = Vue.extend({
  // ...
  components: {
    ButtonComponent
  },
  methods: {
    onSubmit () {
        this.$broadcast('submit-form')
    }
  }
})

在子元素上:

var FormComponent = Vue.extend({
  // ...
  events: {
    'submit-form': function () {
        console.log('I should be hiding');
    }
  }
})

要注意的一些事项:

  • 每当一个事件发现一个正在侦听它并被触发的组件时,它将停止传播,除非该组件中的函数回调返回 true
  • $dispatch() 总是先触发发射它的组件。
  • 我们可以将任意数量的参数传递给事件处理程序。做 this.$broadcast('submit-form', this.formData, this.formStatus) 允许我们访问像'submit-form': function (formData, formStatus) {} 这样的参数