You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue 2迁移Vue 3时@click.native的兼容问题及解决方案

Vue 2 迁移 Vue 3 动态SVG组件点击事件问题解决

问题背景

从Vue 2迁移至Vue 3时,使用动态组件渲染SVG图标,仅@click.native能触发点击事件,但该语法已被废弃。尝试官方文档提供的方案后无效,为组件添加包裹元素会改变图标样式,当前项目使用vue/compat模式。

原实现代码

<template>
  <component
    v-bind="$attrs"
    :is="MyIcons[iconName]"
    @click.native="(event: Event) => emit('click', event)"
  />
</template>

最终解决代码

<script setup lang="ts">
import { ref } from 'vue';
import { useEventListener } from '@vueuse/core';

const element = ref<HTMLDivElement>();
const emit = defineEmits<{
  click: []
}>();

useEventListener(element, "click", (e) => {
  emit("click");
});
</script>

<template>
  <component
    v-bind="$attrs"
    :is="MyIcons[iconName]"
    ref="element"
  />
</template>

内容的提问来源于stack exchange,提问作者DiogoSilva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:22:05