[Vuejs] svg-sprite-loader实现加载svg自定义组件
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自定义组件的更多相关文章
- Vue3 使用 svg-sprite-loader 实现 svg 图标按需加载
前面文章有讲到 svg 图标按需加载的优势以及 Vue 如何使用 vue-svg-icon 实现 svg 图标按需载入: https://www.cnblogs.com/Leophen/p/13201 ...
- Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片
Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在edge ...
- 关于如何使用ehcarts2加载svg矢量地图并自定义县级内部乡镇轮廓
项目需求:显示县级内部的乡镇一级地图的轮廓! 效果预览: 阻碍因素:echarts不提供县级以下乡镇级轮廓. 解决思路: 1.根据资料查找相关县的行政区域图(百度搜索),如本人所制作的浙江省宁波市宁海 ...
- Cocos Creator 资源加载流程剖析【一】——cc.loader与加载管线
这系列文章会对Cocos Creator的资源加载和管理进行深入的剖析.主要包含以下内容: cc.loader与加载管线 Download部分 Load部分 额外流程(MD5 Pipe) 从编辑器到运 ...
- vue 实现tab切换动态加载不同的组件
vue 实现tab切换动态加载不同的组件 使用vue中的is特性来加载不同的组件.具体看如下代码:这个功能对于vue比较复杂的页面可以使用上,可以把一个页面的功能拆分出来,使代码更简单.使用方式具体看 ...
- Android必学-异步加载+Android自定义View源码【申明:来源于网络】
Android必学-异步加载+Android自定义View源码[申明:来源于网络] 异步加载地址:http://download.csdn.net/detail/u013792369/8867609 ...
- MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”
问题 MSBUILD : error MSB3428: 未能加载 Visual C++ 组件"VCBuild.exe".要解决此问题,1) 安装 .NET Framework 2. ...
- 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 ...
- keep-alive vue组件缓存避免多次加载相应的组件
keep-alive vue组件缓存避免多次加载相应的组件
- Vue Router根据后台数据加载不同的组件(思考->实现->不止于实现)
实际项目中遇到的需求 同一个链接需要加载不同的页面组件.根据用户所购买服务的不同,有不同的页面展现. 有一些不好的实现方式 直接把这几个组件写在同一个组件下,通过v-if去判断.如果这么做的话,甚至可 ...
随机推荐
- XA-分布式事物
1.什么是分布式事务 分布式事务就是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上.以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成 ...
- mysql操作数据表中的记录1
一.插入记录INSERT mysql> create TABLE users( -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMEN ...
- Maximum Width Ramp LT962
Given an array A of integers, a ramp is a tuple (i, j) for which i < j and A[i] <= A[j]. The ...
- vue中v-for的使用
本人正在开始学习Vue,每天写写基础的记录,希望对大家有帮助,如有错误还望指出,我也是一个小白,也希望大家能一起进步 v-for指令的使用: 1.循环普通数组 item in list 中的item是 ...
- Qt自定义滚动条(不使用样式表)
前面使用Qt 样式表实现滚动条,在实际工作中,发现存在一些瑕疵,例如如果在主窗口中绘制背景,则有可能给滚动条染色,还有如果想实现特殊的效果,则必须使用自定义风格,即从QStyle的子类派生出新的类型. ...
- TypeError: 'range' object does not support item assignment处理方法
vectorsum.py#!/usr/bin/env/pythonimport sysfrom datetime import datetimeimport numpy as np # def num ...
- dubbo入门学习 六 admin管理界面
1. 本质就是一个web项目 2. 获取注册中心内Provider注册的信息.用页面呈现出来. 3. 实现步骤 3.1 把dubbo-admin-2.5.3.war上传到服务器tomcat中. 3.2 ...
- SQL语句操作数据
--切换数据库:手动切换和命令切换 use MySchool --向Student表中插入数据 --语法:INSERT [INTO] 表名 (列名) VALUES (值列表) --注意事项: --1. ...
- oracle存储过程 out cursor
create or replace procedure BUILDEMPLID(emp_cursor out sys_refcursor) is n_emplid number; n_emplid1 ...
- HTML标签有序标签和无序标签
1.<ul>标签定义无序列表,所谓无序,是指以●.○.▽.▲等开头的,没有顺序的列表项目 1.1 设置无序列表的类型—type 无序列表的默认符号是圆点(● ). ...