首页 > 其他分享 >vue项目引入svg图标(完整步骤)

vue项目引入svg图标(完整步骤)

时间:2023-01-17 14:36:41浏览次数:32  
标签:vue icons svg loader js 图标

1. 安装svg依赖

在vue中首先需要安装可以加载svg的依赖。
npm安装:npm install svg-sprite-loader --save-dev

2. 创建svg文件夹存放svg图标

创建icons文件夹,在icons文件夹下创建svg文件夹存放本地svg图标。

3. vue.config.js 中配置svg图片

vue.config.js代码:

const path = require('path')

module.exports = {
  chainWebpack:config=>{
    // svg图标加载
    config.module
      .rule('svg')
      .exclude.add(path.join(__dirname, 'src/assets/icons/svg'))
      .end()

    config.module
      .rule('icons')// 定义一个名叫 icons 的规则
      .test(/\.svg$/)// 设置 icons 的匹配正则
      .include.add(path.join(__dirname,'src/assets/icons/svg'))// 设置当前规则的作用目录,只在当前目录下才执行当前规则
      .end()
      .use('svg-sprite')// 指定一个名叫 svg-sprite 的 loader 配置
      .loader('svg-sprite-loader')// 该配置使用 svg-sprite-loader 作为处理 loader
      .options({// 该 svg-sprite-loader 的配置
        symbolId:'icon-[name]'
      })
      .end()
  }
}

include.add(路径)–路径不正确会报以下错误:

4. 创建index.js 导入所有svg图标

icons文件夹创建index.js 自动导入所有svg图标。

icons/index.js代码:

const req = require.context('@/assets/icons/svg',false,/\.svg$/)
const requireAll = requireContext =>{
    // requireContext.keys()数据:['./404.svg', './agency.svg', './det.svg', './user.svg']
    requireContext.keys().map(requireContext)
} 
requireAll(req)


执行 requireContext.keys().map(requireContext)得到返回的数据:

5. main.js中引入icons/index.js

6. 创建SvgIcon公用组件

SvgIcon/index.vue代码:

<template>
    <i v-if="iconFileName.indexOf('el-icon-') === 0" :class="iconFileName" />
    <svg v-else class="svg-icon" aria-hidden="true" v-on="$listeners">
        <use :xlink:href="`#icon-${iconFileName}`" />
    </svg>
</template>

<script>
export default {
    name: 'SvgIcon',
    props: {
        iconFileName: {
            type: String,
            required: true
        }
    }
}
</script>

<style scoped>
.svg-icon {
    width: 1em;
    height: 1em;
    overflow: hidden;
    vertical-align: -0.15em;
    fill: currentColor;
}
</style>

全局注册SvgIcon组件:

使用SvgIcon组件:

标签:vue,icons,svg,loader,js,图标
From: https://www.cnblogs.com/moranjl/p/17057718.html

相关文章

  • 小满Vue3第四十六章(Proxy跨域)
    1.首先我们先了解一下什么是跨域主要是出于浏览器的同源策略限制,它是浏览器最核心也最基本的安全功能。当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不......
  • 小满Vue3第四十五章(Vue3 Web Components)
    什么是 WebComponentsWebComponents提供了基于原生支持的、对视图层的封装能力,可以让单个组件相关的javaScript、css、html模板运行在以html标签为界限的局部环境中,不......
  • Vue3 响应式原理
     响应式原理Vue2使用的是 Object.defineProperty Vue3使用的是Proxy2.0的不足对象只能劫持设置好的数据,新增的数据需要Vue.Set(xxx) 数组只能操作七种方法,修改某......
  • 小满Vue3第三十八章(函数式编程,h函数)
    之前跟大家介绍了两种vue编写风格分别是template模板方式,和JSX方式感觉JSX被大家吐槽的很厉害,其实用习惯还挺好用的今天介绍第三种函数式编程主要会用到h函数​​h​​ 接......
  • Vue3 (Vscode插件)
    前端开发的编辑器有很多种如DW,hubilder,WebStorm,sublime,vscode,等等。​​Vue3+vite+Ts+pinia+实战+源码+全栈_哔哩哔哩_bilibili​​ 视频教程随着VsCode开......
  • 学习Vue3 第三十三章(css Style完整新特性)上一章已经讲过了:deep(),其实还有两个选择器
    上一章已经讲过了:deep(),其实还有两个选择器可以补充1.插槽选择器A组件定义一个插槽<template><div>我是插槽<slot></slot></div></template><sc......
  • 学习Vue3 第二十九章(Vue3定义全局函数和变量)
    globalProperties由于Vue3没有Prototype属性使用app.config.globalProperties代替然后去定义变量和函数Vue2//之前(Vue2.x)Vue.prototype.$http=()=>{}Vue3//......
  • 学习Vue3 第三十一章(了解UI库ElementUI,AntDesigin等)
    vue作为一款深受广大群众以及尤大崇拜者的喜欢,特此列出在github上开源的vue优秀的UI组件库供大家参考这几套框架主要用于后台管理系统和移动端的制作,方便开发者快速开发Elem......
  • 【VSCode】vue文件保存时自动格式化
    用户目录下:AppData\Roaming\Code\User\settings.json1{2"workbench.colorTheme":"DefaultDark+",3"workbench.iconTheme":"vscode-icons",4"bracket......
  • 在vue中使用高德地图
    文章地址:https://blog.csdn.net/weixin_43550562/article/details/127753291文章地址:https://www.likecs.com/show-204471276.htmlnpmi@amap/amap-jsapi-loader--save......