vue3 封装svg组件,全局使用svg
npm i svg-sprite-loader
vue.config.js:黑体字部分
const path = require('path') function resolve(dir) { return path.join(__dirname, '.', dir) } module.exports = { transpileDependencies: true, lintOnSave: false, chainWebpack: config => { config.module.rules.delete("svg"); //重点:删除默认配置中处理svg, config.module .rule('svg-sprite-loader') .test(/\.svg$/) .include .add(resolve('src/icons')) //处理svg目录 .end() .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }) config .plugin('html') .tap(args => { args[0].title = "MetrologyWorks"; return args; }).end() config.module .rule('pdf') .test(/\.pdf$/) .use('pdf') .loader('file-loader') .end() }, pluginOptions: { electronBuilder: { nodeIntegration: true } } }
src下新建目录结构 icons:
index.js:
const requireAll = requireContext => requireContext.keys().map(requireContext) const req = require.context('./svg', false, /\.svg$/) requireAll(req)
SvgIcon.vue:
<template> <svg :class="svgClass" aria-hidden="true"> <use :xlink:href="iconName" /> </svg> </template> <script> export default { name: "SvgIcon", props: { iconClass: { type: String, required: true, }, className: { type: String, default: '', }, }, computed: { iconName() { return `#icon-${this.iconClass}` }, svgClass() { if (this.className) { return 'svg-icon ' + this.className } else { return 'svg-icon' } }, } } </script> <style scoped> .svg-icon { width: 1em; height: 1em; fill: currentColor; overflow: hidden; vertical-align: middle; } </style>
main.js:
import './icons' import SvgIcon from '@/icons/SvgIcon' async function startup() { await configure(); const app = createApp(App) app.component('svg-icon', SvgIcon) app.use(ElementPlus) app.use(router) app.mount('#app') }
使用方式:
<template> <div class="real-time-data"> <svg-icon icon-class="realData"></svg-icon> <span>实时数据</span> </div> </template> <script> export default { data () { return { } } } </script> <style lang="scss" scoped> .real-time-data { line-height: 45px; font-size: 14px; color: #666; cursor: pointer; } </style>
记录自己的采坑之路,需要时方便查找
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现