Vue引入iconfont图标,使用svg-icon

iconfont真是太好用了,之前一直使用font-class方式来引用,但是iconfont说Symbol 引用才是未来的主流,那么我们是一定要跟上主流的

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

支持多色图标了,不再受单色限制。
通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
兼容性较差,支持 IE9+,及现代浏览器。
浏览器渲染 SVG 的性能一般,还不如 png。

在vue中使用Symbol引入貌似比font-class要复杂一些,但只要一次配置好,之后就很方便了。

Step1. 安装依赖svg-sprite-loader

cnpm i svg-sprite-loader --save

Step2. 配置vue.config.js

注意:网络上有些文章说在build/webpack.base.conf.js中写配置,不过现在项目一般使用vue-cli3生成,所以,并没有webpack.base.conf.js。当然vue-cli3生成的项目默认也没有vue.config.js文件,手动建立即可,文件位置和其他配置文件相同。

vue.config.js 可参考:https://cli.vuejs.org/zh/config/

// vue.config.js
const path = require("path");

function resolve(dir) {
  return path.join(__dirname, dir);
}
// other code ...
module.exports = {
  // other code ...
  chainWebpack(config) {
    // set 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();
  }
  // other code ...
};
// other code ...

Step3. 在scr中新建文件夹icons,并配置如下

注意:svg文件夹中存放的是单个图标svg文件,不是把iconfont购物车中的图标打包了那个svg文件。
在这里插入图片描述

// icons/index.js

import Vue from "vue";
import SvgIcon from "@/components/SvgIcon"; // svg组件

// register globally
Vue.component("svg-icon", SvgIcon);

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

step4. 在main.js中引用

// main.js

import "./icons"; // icon

step5. 使用

icon-class的类名就是iconfont中下载的svg的文件名。
图标大小颜色可以在CSS中设置。

/* 使用 user.svg */

<svg-icon icon-class="user" />

你可能感兴趣的:(Vue)