前端开发必备:icon封装技巧

main.js
复制代码
import svgIcon from '@/components/SvgIcon'
Vue.component('svg-icon-full', svgIcon)
const requireAll = requireContext => requireContext.keys().map(requireContext)
const req = require.context('@/assets/icons/svg', false, /\.svg$/)  // icon位置
requireAll(req)
SvgIcon组件
复制代码
<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}`" rel="external nofollow" :class="[iconColor]"/>
  </svg>
</template>

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

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

icon-file-name="文件名"

复制代码
<svg-icon-full icon-file-name="alarm" :style="{width: '14px', height: '14px', color: '#FF4621'}"/>
相关推荐
铅笔侠_小龙虾1 分钟前
深入理解 Vue.js 原理
前端·javascript·vue.js
西西学代码5 分钟前
Flutter---showCupertinoDialog
java·前端·flutter
你的眼睛會笑7 分钟前
vue3 使用html2canvas实现网页截图并下载功能 以及问题处理
前端·javascript·vue.js
多多*8 分钟前
上传文件相关业务,采用策略模式+模版方法模式进行动态解耦
java·开发语言
ZTLJQ18 分钟前
植物大战僵尸HTML5游戏完整实现教程
前端·游戏·html5
无光末阳34 分钟前
vue 环境下多个定时器的创建与暂停的统一封装
前端·vue.js
Hilaku37 分钟前
技术Leader的“第一性原理”:我是如何做技术决策的?
前端·javascript·面试
liyf37 分钟前
发布-订阅(Publish–Subscribe) vs 观察者模式(Observer Pattern)
前端
赴前尘38 分钟前
Go 通道非阻塞发送:优雅地处理“通道已满”的场景
开发语言·后端·golang
云中雾丽43 分钟前
Flutter 里的 Riverpod 用法解析
前端