vue2项目 使用 svg

项目中使用svg图标
组件使用方法

  1. 安装svg
    npm install svg-sprite-loader -D
  2. 添加编译配置
    在vue.config.js添加一下配置
module.exports = {
	chainWebpack: (config) => {
    // set svg-sprite-loader
    config.module
      .rule('svg')
      .exclude.add(path.join(__dirname, '/assets/svg')) // 存放svg文件的目录
      .end();
    config.module
      .rule('icons')
      .test(/\.svg$/)
      .include.add(path.join(__dirname, '/assets/svg')) // 存放svg文件的目录
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'
      })
      .end();
  }
}
  1. 创建组件

在你项目对应的目录创建SvgIcon组件

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

<script>
export default {
  name: 'SvgIcon',
  props: {
    iconClass: { // 这里就是svg文件的名称
      type: String,
      required: true,
    },
    className: {
      type: String,
      default: '',
    },
  },
  computed: {
    iconName () { // 利用计算属性拼接生成svg名称
      return `#icon-${this.iconClass}`;
    },
    svgClass () {
      if (this.className) {
        return 'svg-icon ' + this.className;
      } else {
        return 'svg-icon';
      }
    },
  },
};
</script>

<style scoped>
.svg-icon {
  width: 100%;
  height: 100%;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>
  1. 注册svg图标
    在src目录下创建icons文件,所有的.svg文件都放这个文件下
    另外在icons文件下创建index.js文件写入下面的代码
import Vue from 'vue';
import SvgIcon from '/base/components/SvgIcon/index.vue'; // svg组件

// 注册到全局
Vue.component('SvgIcon', SvgIcon);

// 注册对应的svg图标
const requireAll = (requireContext) => requireContext.keys().map(requireContext);
/** 
 * 第一个参数 对应的目录
 * 第二个参数 是否开启子目录
 * 匹配的文件
*/ 
const req = require.context('./', false, /\.svg$/);
requireAll(req);
// console.log('req', requireAll(req));
  1. 在main.js使用
import './icons/index.js';
  1. 使用svg图标
<template>
  <div class="container">
    <div class="notAuth-container">
      <div class="svgContainer">
      	<!-- notPer 就是svg文件名称 -->
        <SvgIcon icon-class="notPer" />
      </div>
      <div class="text">
        暂无权限!
      </div>
    </div>
  </div>
</template>

最终渲染结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值