在 Vue 3.0 中,事件处理的方式略有变化,特别是在使用自定义事件和 $emit 方法时。Vue 3.0 引入了 emits 选项,它用于声明组件可以触发的事件,以提供更好的类型检查。

以下是在 Vue 3.0 中使用事件的示例:
<template>
  <div>
    <button @click="handleClick">Click me</button>
    <custom-component @custom-event="handleCustomEvent"></custom-component>
  </div>
</template>

<script>
import { defineComponent } from 'vue';

const CustomComponent = defineComponent({
  template: '<button @click="triggerCustomEvent">Trigger Custom Event</button>',
  methods: {
    triggerCustomEvent() {
      // 在组件内部触发自定义事件
      this.$emit('custom-event', 'Custom event data');
    }
  },
  emits: ['custom-event'] // 使用 emits 选项声明可以触发的事件
});

export default {
  components: {
    CustomComponent
  },
  methods: {
    handleClick() {
      console.log('Button clicked');
    },
    handleCustomEvent(data) {
      console.log('Custom event handled with data:', data);
    }
  }
};
</script>

在上述示例中,我们使用 @click 直接绑定了一个原生事件处理函数,而在 CustomComponent 中,我们使用 $emit 方法触发了一个自定义事件。值得注意的是,在 CustomComponent 的 emits 选项中声明了可以触发的自定义事件,这有助于提供更好的类型检查。

需要注意的是,Vue 3.0 中 $on 和 $off 方法已经被废弃,取而代之的是直接在 setup 函数中使用 on 函数:
<script>
import { defineComponent, on } from 'vue';

export default defineComponent({
  setup() {
    // 在 setup 函数中使用 on 函数
    onMounted(() => {
      console.log('Component mounted');
    });

    return {};
  }
});
</script>

这种方式更加一致并且在类型检查方面更加友好。有关 Vue 3.0 中的事件 API 的更多信息,请查阅[官方文档](https://v3.vuejs.org/guide/migration/events-api.html)。


转载请注明出处:http://www.zyzy.cn/article/detail/544/Vue 3.0