Nuxt 使用这个Svg 组件刷新页面会闪烁
components\SvgIcon
<template>
<svg aria-hidden="true" class="svg-icon" :width="size" :height="size">
<use :xlink:href="symbolId" :fill="color" />
</svg>
</template>
<script setup>
const props = defineProps({
prefix: {
type: String,
default: "icon",
},
name: {
type: String,
required: true,
},
color: {
type: String,
},
size: {
type: String,
default: "1em",
},
});
const symbolId = computed(() => `#${props.prefix}-${props.name}`);
</script>
<style scoped>
.svg-icon {
display: inline-block;
outline: none;
width: 1em;
height: 1em;
vertical-align: -0.15em; /* 因icon大小被设置为和字体大小一致,而span等标签的下边缘会和字体的基线对齐,故需设置一个往下的偏移比例,来纠正视觉上的未对齐效果 */
fill: currentColor; /* 定义元素的颜色,currentColor是一个变量,这个变量的值就表示当前元素的color值,如果当前元素未设置color值,则从父元素继承 */
overflow: hidden;
}
</style>
plugins\svgicon.ts
import SvgIcon from "@/components/SvgIcon/index.vue";
import "virtual:svg-icons-register";
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.component("svg-icon", SvgIcon);
});
nuxt.config.ts
vite: {
plugins: [
createSvgIconsPlugin({
// 指定需要包含 SVG 文件的目录
iconDirs: [path.resolve(process.cwd(), "assets/icons/svg")],
// 指定symbolId格式
symbolId: "icon-[dir]-[name]",
}),
requireTransform({
fileRegex: /\.js$|\.vue$/, // 匹配需要处理的文件类型
}),
],
},
结果会闪烁
