vue2.x封装svg组件并使用

第一步:安装svg-sprite-loader插件

javascript 复制代码
<!-- svg-sprite-loader svg雪碧图 转换工具 -->
<!-- <symbol> 元素中的 path 就是绘制图标的路径,这种一大串的东西我们肯定没办法手动的去处理,
那么就需要用到插件 svg-sprite-loader 帮助我们处理图标。此插件就是将 .svg 文件自动生成 <symbol>
 元素并插入进 <svg> 标签内,通过插件的处理就可以很方便解决生成<symbol> 图形模板对象的问题。-->
<!--安装-->
npm install -S svg-sprite-loader
yarn add --dev svg-sprite-loader

第二步:封装svg组件

javascript 复制代码
<template>
  <svg class="svg-icon" aria-hidden="true">
    <use :xlink:href="iconName" />
  </svg>
</template>
 
<script>
export default {
  name: "SvgIcon",
  props: {
    iconClass: {
      type: String,
      required: true,
    },
  },
  computed: {
    iconName() {
      return `#icon-${this.iconClass}`;
    },
  },
};
</script>
 
<style scoped>
/*此处为所有图标默认显示样式*/
.svg-icon {
  width: 30px;
  height: 30px;
  fill: currentColor;
  overflow: hidden;
}
</style>

第三步:将需要的svg图标放入目录中

第四步:配置

可在webpack.config.js或vue.config.js中配置,若项目根目录下没有vue.config.js,则手动创建一个vue.config.js,将下列代码直接粘贴进去即可

javascript 复制代码
const path = require('path')
const webpack = require('webpack')

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


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

第五步:全局注册

在icons目录中创建index.js文件

index.js中内容如下

javascript 复制代码
import Vue from 'vue'
import SvgIcon from '../../components/svgIcon'// svg component
 
// register globally
Vue.component('svg-icon', SvgIcon)
 
const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)

第六步:在main.js中全局引入

javascript 复制代码
import './assets/icons/index'

第七步:使用

代码如下:

javascript 复制代码
<!-- icon-class的值对应的是目录中svg的名字 -->
<svg-icon icon-class="user" />
<svg-icon icon-class="advert" color='#27ac3d'/>
<svg-icon icon-class="brand" color='red'/>

效果如下

注意:若未显示出图标请重新运行项目。

运行后如果还未显示请检查相应地方的引入路径是否正确,尤其是vue.config.js中的路径。

相关推荐
崔庆才丨静觅7 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60618 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了8 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅8 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅8 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅9 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment9 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅9 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊9 小时前
jwt介绍
前端
爱敲代码的小鱼9 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax