vue怎么封装自己的Svg图标组件库

vue如何封装自己的Svg图标组件库(svg-sprite-loader)

这篇文章主要介绍了vue如何封装自己的Svg图标组件库(svg-sprite-loader),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

一. 安装依赖

npm install svg-sprite-loader --save-dev   
OR
yarn add svg-sprite-loader

二. 配置 vue.config.js(主要为打包进行设置)

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()
  }
}

三. 封装 Svg 组件

1.0 在src/components下新建文件夹及文件SvgIcon/index.vue,index.vue添加如下内容:

 <template>
  <i v-if="iconFileName.indexOf('el-icon-') === 0" :class="iconFileName" />
  <svg v-else class="svg-icon" aria-hidden="true">
    <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>

2.0 在src下新建icons文件夹,及icons文件夹下svg文件夹、index.js文件,将svg图片放入svg文件夹中,在 index.js文件中添加如下内容

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

3.0 在main.ts中全局注册引入

import  SvgIcon from '@/components/SvgIcon/index.vue'
import  '@/assets/icons/index.js'

// 全局注册svg组件
Vue.component('svg-icon', SvgIcon)

四.在组件中使用

<div>
	<svg-icon icon-file-name="add"></svg-icon>
	<svg-icon icon-file-name="del"></svg-icon>
	<svg-icon icon-file-name="user"></svg-icon>
</div>

五.附加结构图

: 请添加图片描述

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敷衍〓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值