svg-icon

SVG生成ICON


vue.config.js

const path = require('path')

const resolve = dir => path.join(__dirname, '.', dir)
module.exports = {
 chainWebpack: (config) => {
	// 打包分析图
	config.module.rules.delete('svg');
	config.module.rule('svg-sprite-loader')
	 .test(/\.svg$/)
	 .include.add(resolve('src/assets/icons'))
	 .end()
	 .use('svg-sprite-loader')
	 .loader('svg-sprite-loader')
	 .options({
	  symbolId: 'icon-[name]'
     })
     .end()
 }
}

src/assets/icons文件夹包含index.ts和svg文件夹

// index.ts
/**
加载所有svg
@params app:整个应用的实例
**/
export function loadAllSvg() {
 const req = require.context('./svg', false, /\.svg$/);
 req.keys().map(req);
}

src/svg-icon文件夹

// index.vue
<template>
 <svg :class="svgClass" aria-hidden="true">
  <use :xlink:href="iconName"></use>
</svg>
</template>

<script lang="ts">
 import { defineComponent, computed } from 'vue'
export default defineComponent({
 name: 'svg-icon',
 props: {
  iconClass: {
   String,
   required: true
  },
  className: {
   String
 }
 },
 setup(props){
  const iconName = computed(() => `#icon-${props.iconClass}`)
  const svgClass = computed(() => {
    if(props.className) {
      return 'svg-icon' + props.className
    } else {
      return 'svg-icon'
    }
 })
 return {
 iconName, svgClass 
 }
 }
})
</script>

<style lang="less">
 .svg-icon{
  width:16px;
  height:16px;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>

配置使用svg格式的图片

// main.ts
const app: ReturnType<typeof createApp> = createApp(App)
import { loadAllSvg } from './assets/icons/index'
loadAllSvg()
import icon from "@/svg-icon/index.vue"
app.component('svg-icon', icon) 

使用

<svg-icon icon-class="icon-user" class="svg-class" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值