1、安装 svg-sprite-loader

npm install svg-sprite-loader -D

或者

npm install svg-sprite-loader --save-dev

2、将所有svg图片放到assets/svg下,以此为例,修改文件 build/webpack.base.conf.js

找到代码:

{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},

增加一行

exclude: [resolve("src/assets/svg")],

意思是用url-loader加载的时候过滤掉文件夹 src/assets/svg 下面的文件

{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
exclude: [resolve("src/assets/svg")],
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},

同时在后面增加一条规则

{
test: /\.svg$/,
loader: "svg-sprite-loader",
include: [resolve("src/assets/svg")],
options: {
symbolId: "[name]"
}
}

3、自定义SvgIcon组件

在components新建 SvgIcon.vue

<template>
<svg :class="svgClass" :style="style" aria-hidden="true">
<use :xlink:href="`#${name}`"></use>
</svg>
</template> <script type="text/ecmascript-6">
export default {
name: 'svg-icon',
props: {
name: {
type: String,
required: true
},
className: {
type: String
},
width: {
type: String,
default: '5vw'
},
height: {
type: String,
default: '5vw'
}
},
data () {
return {
style: {
width: this.width,
height: this.height
}
}
},
computed: {
svgClass () {
if (this.className) {
return 'svg-icon ' + this.className
} else {
return 'svg-icon'
}
}
}
}
</script> <style>
.svg-icon {
width: 5vw;
height: 5vw;
fill: currentColor;
overflow: hidden;
}
</style>

其中绑定了class和style,在用这个组件的时候可以直接设置宽度和高度以及类名,额外的属性可以自己扩展。

4、创建svg.js用于注册SvgIcon组件和批量引入svg图片,我创建在src/utils/svg.js

import Vue from 'vue'
import SvgIcon from '../components/SvgIcon.vue' Vue.component('svg-icon', SvgIcon) // 引入所有svg
const requireAll = requireContext => requireContext.keys().map(requireContext)
const req = require.context('../assets/svg', false, /\.svg$/)
// const iconMap = requireAll(req)
// console.log(iconMap)
requireAll(req)

5、用法

<svg-icon name="icon-pc" width="12vw" height="12vw"></svg-icon>

name值即为svg图片名称,如上icon-pc,即为icon-pc.svg

[Vuejs] svg-sprite-loader实现加载svg自定义组件的更多相关文章

  1. Vue3 使用 svg-sprite-loader 实现 svg 图标按需加载

    前面文章有讲到 svg 图标按需加载的优势以及 Vue 如何使用 vue-svg-icon 实现 svg 图标按需载入: https://www.cnblogs.com/Leophen/p/13201 ...

  2. Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片

    Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在edge ...

  3. 关于如何使用ehcarts2加载svg矢量地图并自定义县级内部乡镇轮廓

    项目需求:显示县级内部的乡镇一级地图的轮廓! 效果预览: 阻碍因素:echarts不提供县级以下乡镇级轮廓. 解决思路: 1.根据资料查找相关县的行政区域图(百度搜索),如本人所制作的浙江省宁波市宁海 ...

  4. Cocos Creator 资源加载流程剖析【一】——cc.loader与加载管线

    这系列文章会对Cocos Creator的资源加载和管理进行深入的剖析.主要包含以下内容: cc.loader与加载管线 Download部分 Load部分 额外流程(MD5 Pipe) 从编辑器到运 ...

  5. vue 实现tab切换动态加载不同的组件

    vue 实现tab切换动态加载不同的组件 使用vue中的is特性来加载不同的组件.具体看如下代码:这个功能对于vue比较复杂的页面可以使用上,可以把一个页面的功能拆分出来,使代码更简单.使用方式具体看 ...

  6. Android必学-异步加载+Android自定义View源码【申明:来源于网络】

    Android必学-异步加载+Android自定义View源码[申明:来源于网络] 异步加载地址:http://download.csdn.net/detail/u013792369/8867609 ...

  7. MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”

    问题 MSBUILD : error MSB3428: 未能加载 Visual C++ 组件"VCBuild.exe".要解决此问题,1) 安装 .NET Framework 2. ...

  8. npm install error: MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”

    When I tried to run angular 4 material2 demo on my windows server 2012, got a error message: node-pr ...

  9. keep-alive vue组件缓存避免多次加载相应的组件

    keep-alive vue组件缓存避免多次加载相应的组件

  10. Vue Router根据后台数据加载不同的组件(思考->实现->不止于实现)

    实际项目中遇到的需求 同一个链接需要加载不同的页面组件.根据用户所购买服务的不同,有不同的页面展现. 有一些不好的实现方式 直接把这几个组件写在同一个组件下,通过v-if去判断.如果这么做的话,甚至可 ...

随机推荐

  1. FTP做作业用到的知识点:

    FTP做作业用到的知识点: 一: os.path 模块下常用的用法 os.path.abspath(file) #返回的是.py文件的绝对路径(完整路径) os.path.dirname(file) ...

  2. Linux平台生成awr报告

    1.使用oracle用户登录应用服务器所使用的数据库所在的服务器 # su –oracle 2.输入env命令,查询出ORACLE_HOME 目录 3.然后进入$ORACLE_HOME/rdbms/a ...

  3. STS中springmvc.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  4. Java学习笔记:多线程(二)

    与线程生命周期相关的方法: sleep 调用sleep方法会进入计时等待状态,等待时间到了,进入就绪状态. yield 调用yield方法会让别的线程执行,但是不确保真正让出.较少使用,官方注释都说 ...

  5. 最大熵与最大似然,以及KL距离。

    DNN中最常使用的离散数值优化目标,莫过于交差熵.两个分布p,q的交差熵,与KL距离实际上是同一回事. $-\sum plog(q)=D_{KL}(p\shortparallel q)-\sum pl ...

  6. Open quote is expected for attribute "{1}" associated with an element type "column".

    这个的错误的意思很简单:就是自己的配置文件是否缺少""号

  7. kettle连接oracle报错oracle.i18n.text.converter.CharacterConverter.OGS.getInstance(I)Loracle/i18n/text/converter/CharacterConverter

    问题背景1:需要将一张excel中的数据导入到数据库中,并且还有关联转换和去重的处理问题,且此excel表不是固定的,需要写一个脚本 当新的excel拿来的时候,可以直接导入即可.所以我想用kettl ...

  8. 构造 this super

    构造方法 我们对封装已经有了基本的了解,接下来我们来看一个新的问题,依然以Person为例,由于Person中的属性都被private了,外界无法直接访问属性,必须对外提供相应的set和get方法.当 ...

  9. SIFT算法大综合

     SIFT算法原理+参看资料+问题issue 参考书籍——<图像局部不变性特征与描述>王永明.王贵锦著 SIFT特征点提取——详见博客:https://blog.csdn.net/ling ...

  10. #2019-2020-4 《Java 程序设计》第九周总结

    2019-2020-4 <Java 程序设计>第九周知识总结 第十一章:JDBC与MySQL数据库 11.1 MySQL数据库管理系统 下载安装: 11.2 启动MySQL数据库服务器 具 ...