vue3自动引入 svg

14 篇文章 1 订阅

下载sv svg 图片下载地址 (来自阿里巴巴的免费项目 iconfont)

项目演示
github地址 vue-ant-design
gitee地址 vue-ant-design 项目地址
项目4个分支 ant-design ant-dessign-electron element-plus element-plus-electron

1 安装 svg 依赖

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

2 新建文件

svg--
	 --index.js 
	 --svg.vue
	 --icon文件夹

在这里插入图片描述

3 配置信息

index.js
//下面这个是导入svgIcon/svg下的所有svg文件
const requireAll = (requireContext) => requireContext.keys().map(requireContext)
const req = require.context('./icon', false, /\.svg$/)
/*
 第一个参数是:'./svg' => 需要检索的目录,
 第二个参数是:false => 是否检索子目录,
 第三个参数是: /\.svg$/ => 匹配文件的正则
*/
requireAll(req)
svg.vue

<template>
    <svg class="svg-icon " :class="className" :style="size?`width:${size}px;height:${size}px;`:''" aria-hidden="true">
      <use :xlink:href="svgName" />
    </svg>
  </template>
  
  <script setup>
    import { ref,computed } from 'vue';
  // 声明组件要触发的事件
  const emits = defineEmits(['increase']);
  // 声明接收参数
  const props = defineProps({
    svg: String,
    class: String,
    size: Number,
  });
  const svgName=computed(()=>`#icon-${props.svg}` )
  const className=computed(()=>props.class)
  const size=computed(()=>props.size)

  </script>
  
  <style scoped>
  .svg-icon {
    width: 16px;
    height: 16px;
    vertical-align: -0.25em;
    fill: currentColor;
    overflow: hidden;
  }
  </style>

4 配置vue.fonfig.js

module.exports = {
  chainWebpack(config) {
      const svgRule = config.module.rule('svg') // 找到svg-loader
      svgRule.uses.clear() // 清除已有的loader, 如果不这样做会添加在此loader之后
      svgRule.exclude.add(/node_modules/) // 正则匹配排除node_modules目录
      svgRule // 添加svg新的loader处理
        .test(/\.svg$/)
        .use('svg-sprite-loader')
        .loader('svg-sprite-loader')
        .options({
          symbolId: 'icon-[name]',
        })
      // 修改images loader 添加svg处理
      const imagesRule = config.module.rule('images')
      imagesRule.exclude.add(resolve('src/common/svg'))
      config.module
        .rule('images')
        .test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
        }
        }

在这里插入图片描述

main.js 组成svg 文件

import   "@/common/svg/index"

页面使用

  <svgView :svg="value.icon" ></svgView> 
    
 import svgView from "@/common/svg/svg.vue"
 
   export default {
        components:{
            svgView
        },
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值