首页 前端知识 Vue3中使用svg文件图标(TS)

Vue3中使用svg文件图标(TS)

2024-08-21 22:08:06 前端知识 前端哥 30 458 我要收藏

1、写入vue.config.js,设置svg-sprite-loader

在vue3项目的根目录创建vue.config.js文件,写入如下:

import path from "path";

function resolve(dir) {
    return path.join(__dirname, '.', dir)
}

module.exports = {
    chainWebpack: config => {
        // set svg-sprite-loader
        config.module
            .rule('svg')
            .exclude
            .add(resolve('src/icons'))
            .end()
        config.module
            .rule('icons')
            .test(/\.svg$/)
            .include
            .add(resolve('src/icons'))
            .end()
            .use('svg-sprite-loader')
            .loader('svg-sprite-loader')
            .options({
                symbolId: 'icon-[name]'
            })
            .end()
    }
}

2、创建icons文件

在src文件下创建一个icons的文件,如图所示:

这里的svg文件夹,存放*.svg的矢量图

效果图
在/src/icons/index.js 代码如下:

const req = require.context('./svg', false, /\.svg$/)
req.keys().map(req)

3、创建 全局组件

在/src/components/ 下创建文件SvgIcon.vue, 代码如下

<template>
<svg :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName" />
</svg>
</template>
<script lang="ts" setup>
import { computed, defineProps } from 'vue'

const props = defineProps<{
    iconClass: string;
    className?: string;
    [prop: string]: unknown;
}>();

const iconName = computed(() => {
    return props.iconClass ? `#icon-${props.iconClass}` : "#icon"
})
const svgClass = computed(() => {
    return props.className ? `svg-icon ${props.className}` : "svg-icon"
})
</script>

<style scoped>
.svg-icon {
    width: 1em;
    height: 1em;
    vertical-align: -0.15em;
    fill: currentColor;
    overflow: hidden;
}
</style>

4、注册全局组件

在main.ts中注册全局组件

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
// svg-icon
import SvgIcon from '@/components/SvgIcon.vue';
import "@/icons/index";

const app = createApp(App)
app.component("svg-icon", SvgIcon)
app.use(router)
app.mount('#app')

5、使用

<!-- 这里的icon-calss的值为存放在icons/svg文件下的文件名称 -->
<svg-icon icon-class="CSS3" />
<svg-icon icon-class="HTML5" />
<svg-icon icon-class="Bootstrap" />
<svg-icon icon-class="javascript" />
<svg-icon icon-class="jQuery" />
<svg-icon icon-class="uniapp" />

效果图

转载请注明出处或者链接地址:https://www.qianduange.cn//article/16439.html
标签
评论
发布的文章

HTML5入门基础

2024-06-16 09:06:50

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!