在vue项目中处理svg图片(注册成组件引入)(typescript)

在vue项目中处理svg图片(注册成组件引入)(typescript)

1.安装loader

npm i svg-sprite-loader

2.在src目录下新建icons

  1. 内置文件夹svg,用于存放图片
  2. 内置文件index.ts,用于全局注册组件
  3. 内置文件svgo.yml,序列化文件格式,可有可无
  4. 写svg-icon.vue组件

先完成vue组件

<template>
  <svg :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName" />
  </svg>
</template>
<script lang="ts">
import Vue from "vue";
import { Component, Prop } from "vue-property-decorator";
@Component({})
export default class SvgIcon extends Vue {
  @Prop({
    required: true,
  })
  private iconClass!: string;
  @Prop({
    default: "",
  })
  private className!: string;
  /**
   * @description: 计算icon名称
   * @return {string}: icon名称
   */
  get iconName() {
    return `#icon-${this.iconClass}`;
  }

  /**
   * @description: 计算svg名称
   * @return {string}: svg名称
   */
  get svgClass() {
    if (this.className) {
      return `svg-icon${this.className}`;
    } else {
      return "svg-icon";
    }
  }
}
</script>

<style scoped>
svg {
  width: 100%;
  height: 100%;
}
</style>

完成index.ts

import Vue from "vue";
import svgIcon from "@/components/common/SvgIcon.vue";
import { RequireContext } from "@/type/common/common.interface";
Vue.component("svg-icon", svgIcon); // 挂载在全局
const requireAll = (requireContext: RequireContext) =>
  requireContext.keys().map(requireContext);
const req = require.context("./svg", false, /\.svg$/);

requireAll(req);

完成svgo.yml

# replace default config

# multipass: true
# full: true

plugins:
  # - name
  #
  # or:
  # - name: false
  # - name: true
  #
  # or:
  # - name:
  #     param1: 1
  #     param2: 2

  - removeAttrs:
      attrs:
        - "fill"
        - "fill-rule"

处理vue.webpack.js中的svg-loader

  chainWebpack: (config) => {
  //先去除原有svg-loader对这个文件夹的影响,不然你在css或者less中无法正常使用svg文件
    config.module
      .rule('svg')
      .exclude.add(resolve('src/icons'))
      .end();

   //再添加svg-sprite-loader处理该文件夹
       config.module
      .rule('icons')
      .test(/\.svg$/)
      .include.add(resolve('src/icons'))
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'
      });
  }
展开阅读全文

Windows版YOLOv4目标检测实战:训练自己的数据集

04-26
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值