Vue.js 是一个用于构建用户界面的渐进式框架,它提供了许多功能,其中之一是 emits,这是一个非常实用的功能,用于在组件之间进行通信。
emits 用于在子组件中向父组件通信,它定义了父组件期望从子组件发送的事件信息。子组件可以调用 $emit 方法来触发特定的事件,并传递参数。当事件被触发时,Vue.js 会调用父组件中相应的方法,从而完成组件间的通信。
下面是一个示例,演示了如何在子组件中使用 emits:
Vue.component('child', { emits: ['increment'], template: ``, methods: { onClick() { this.$emit('increment', 1) } } }) Vue.createApp({ data() { return { count: 0 } }, methods: { incrementHandler(val) { this.count += val } } }).mount('#app')
在这个示例中,父组件 app 定义了一个名为 count 的data属性,和一个名为 incrementHandler 的方法。它同时使用了子组件 child, 声明了 emits 属性,该属性是一个数组,包含了父组件期望从子组件发送的事件名称。子组件中定义了一个名为 onClick 的方法,该方法通过 $emit 方法触发了名为increment 事件,并传递了1个参数。因此,每次点击按钮时,incrementHandler 方法将被调用,count 属性将增加1。
emits 不仅可以定义简单的事件名称,还可以定义对象格式的事件名称,如下所示:
emits: { increment: ({ step }) =>typeof step === 'number' }
在这个示例中,increment 事件需要一个名为 step 的数字类型的参数。如果参数不是数字类型,Vue.js 会在开发环境中发出警告消息。