项目使用svg图标

vue-element-admin基础模板中,已经封装好了使用svg图标的组件,此组件在vue-ssr项目中也同样适用,所在路径为:@/icons,在其中我们可以找到相关的代码,所有在文件夹中的svg图片注册到全局中,可以在项目中任意地方使用。所以图标均可在 @/icons/svg。可自行添加或者删除图标,所以图标都会被自动导入,无需手动操作。
原理:
使用require.context() 函数来创建自己的 context
可以给这个函数传入三个参数:一个要搜索的目录,一个标记表示是否还搜索其子目录, 以及一个匹配文件的正则表达式。
webpack 会在构建中解析代码中的 require.context()

require.context('./test', false, /\.test\.js$/);
//(创建出)一个 context,其中文件来自 test 目录,request 以 `.test.js` 结尾
require.context('../', true, /\.stories\.js$/);
// (创建出)一个 context,其中所有文件都来自父文件夹及其所有子级文件夹,request 以 `.stories.js` 结尾。

使用方式:



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中引入,或者在createApp中使用,就可以匹配到svg文件夹下的所有图片,我们可以通过这些将svg图片用webpack相关组件制作成svg-sprint雪碧图
require.context("./test", false, /.test.js$/);
这行代码就会去 test 文件夹(不包含子目录)下面的找所有文件名以 .test.js 结尾的文件能被 require 的文件。
更直白的说就是 我们可以通过正则匹配引入相应的文件模块。
require.context有三个参数:
directory:说明需要检索的目录
useSubdirectories:是否检索子目录
regExp: 匹配文件的正则表达式

之后我们增删改图标直接直接文件夹下对应的图标就好了,什么都不用管,就会自动生成 svg symbol了。

我们找到引入的svg组件@/components/SvgIcon



svg中无法使用{{}}渲染传递的值,因此我们只能直接使用传递的iconClass,或者在computed中拼接字符串,我们可以看到iconName即为生成的svg名称,由于拼接的字符串和iconfont中的svg格式不一样,所以我们直接使用会没有任何效果,我们只需要把此处的格式改为return `#:-${this.iconClass}
然后我们在main.js中引入iconfont的svg文件iconfont.js,就可以在全局中使用iconfont中的svg标签了。
图标样式通过svgClass来控制

你可能感兴趣的:(项目使用svg图标)