vue2动态使用自定义svg图标

1、安装svg-sprite-loader包

npm install svg-sprite-loader@6.0.11 --save

2、在components文件夹中创建SvgIcon.vue组件

<template>
  <svg
    className="svg-icon"
    aria-hidden="true"
    :style="{ width: width, height: height }"
  >
    <use :xlink:href="iconName" />
  </svg>
</template>

<script>
export default {
  props: {
    iconClass: {
      type: String,
      default: "account-pin-circle-fill",
    },
    width: {
      type: String,
      default: "16px",
    },
    height: {
      type: String,
      default: "16px",
    },
  },
  computed: {
    iconName() {
      return `#icon-${this.iconClass}`;
    },
  },
};
</script>

3、src下创建icons文件夹,并在其中创建svg文件夹用于存放自己的svg图标,创建index.js文件

index.js文件内容,进行全局挂载

import Vue from "vue";
import SvgIcon from "../components/SvgIcon.vue"; 
Vue.component("svg-icon", SvgIcon);

const req = require.context("./svg", false, /\.svg$/);
const requireAll = (requireContext) =>
  requireContext.keys().map(requireContext);
requireAll(req);

4、配置vue.config.js文件

const { defineConfig } = require("@vue/cli-service");
//引入path
const path = require("path");
function resolve(dir) {
  return path.join(__dirname, dir);
}
module.exports = defineConfig({
  transpileDependencies: true,
  chainWebpack: (config) => {
    // 配置 svg-sprite-loader
    config.module.rule("svg").exclude.add(resolve("src/icons")).end();
    config.module
      .rule("icons")
      .test(/\.svg$/)
      .include.add(resolve("src/icons"))
      .end()
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
      })
      .end();
  },
});

5、组件已经全局挂载,无需再次引入,可直接在需要的地方使用

<svg-icon icon-class="icon-name" width="16px" height="16px"></svg-icon>
//icon-class动态传入值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值