vue3 emits 对象方式用法
Vue3 Emits 对象方式用法
Vue3 中的 emits 是一个新的选项,用于代替 Vue2 中的 beforeCreate 生命周期钩子和 this.$emit 方法。emits 允许我们在组件上声明它可以触发的事件,从而更好地定义组件的 API。
1. 基本用法
在组件中,我们可以使用 emits 选项来声明一个组件可以触发的事件。例如:
emits: ['update']
这样就声明了当组件触发 update 事件时,父组件可以监听并做出相应的响应。
2. 参数传递
我们可以在 emits 中指定每个事件的参数,这样在组件触发事件时,可以传递相应的参数给父组件。
emits: {
  update: (value) => typeof value === 'string'
}
上述代码表示在触发 update 事件时,只有传递的参数是字符串类型时,父组件才会接收到该事件。
3. 返回值处理
在 Vue3 中, emit 方法会返回一个布尔值,用于表示是否触发了对应的事件。我们可以通过 v-on@ 符号来监听事件并获取返回值。
<template>
  <button @update="handleUpdate">更新</button>
</template>
methods: {
  handleUpdate() {
typeof的用法    const result = this.$emit('update', 'Hello World');
    if (result) {
      ('事件触发成功');
    } else {
      ('事件触发失败');
    }
  }
}
4. 动态事件名
在某些情况下,我们可能需要根据组件的状态来动态地决定触发哪个事件。Vue3 为我们提供了一种动态事件名的写法。
emits: {
  [eventName]: (value) => typeof value === 'string'
}
在上述代码中,eventName 是一个变量,表示事件的名称。根据组件的具体状态,我们可以动态地决定 eventName 的值,从而实现动态事件的触发。
5. 隐式事件
如果我们希望组件能够触发任意事件,可以使用 '*' 来声明一个隐式事件。
emits: '*'
上述代码表示该组件可以触发任意事件,无论是预定义的还是自定义的。
总结
emits 是 Vue3 中用于定义组件事件的选项。通过使用 emits,我们可以更好地定义组件的 API,使其更加直观和易于使用。在实际开发中,我们可以根据实际情况来灵活运用 emits 的各种用法,从而实现更强大的组件功能。
6. 阻止默认事件
除了定义事件之外,emits 还可以用来阻止默认事件的发生。我们可以通过在事件函数中返回 false 来阻止默认事件的触发。
emits: {
  click: (event) => {
    ();
    return false;
  }
}
上述代码表示当组件触发 click 事件时,会阻止默认的点击事件,并返回 false
7. 组合事件
在 Vue3 中,我们可以使用组合事件的方式来同时监听多个事件。
emits: {
  '': (event) => {
    ();
  }
}
上述代码表示同时监听 clickrightmiddle 三个事件,并在事件触发时阻止默认行为。
8. 修饰符
与 Vue2 中的事件修饰符类似,Vue3 的 emits 选项也支持一些修饰符,用于更精确地定义事件。例如:
emits: {
  click: (event) => {
    ();
  },
  '': (event) => {
    ('按下了 Ctrl 键');
  }
}
上述代码表示当触发 click 事件时,会阻止默认行为;而当同时按下 Ctrl 键时,会触发额外
的处理逻辑。
9. 同名事件
在某些情况下,可能会存在同名事件但处理逻辑不同的情况。在 Vue3 中,我们可以使用数组的方式来声明同名事件并定义不同的处理函数。