• vue项目中进行svg图标组件封装及配置(全局引入)


     通常项目中图标都是使用img、iconfont等,使用svg图标的好处是:

    1、性能

    影响Web性能的一个最重要方面是网页上使用的文件的大小。与栅格图形(如GIF,JPG和PNG)相比,SVG图形通常是较小的文件。

    2、无障碍

    SVG文件是基于文本的,可以进行搜索和索引。这使得它们可以通过屏幕阅读器、搜索引擎和其他设备被阅读。

    1、安装npm install svg-sprite-loader --save-dev

    2、创建一个自定义组件 

    具体代码:

    1. <template>
    2. <svg :class="svgClass" aria-hidden="true" v-on="$listeners">
    3. <use :xlink:href="iconName" />
    4. </svg>
    5. </template>
    6. <script>
    7. export default {
    8. name: "SvgIcon",
    9. props: {
    10. iconClass: {
    11. type: String,
    12. required: true,
    13. },
    14. className: {
    15. type: String,
    16. default: "",
    17. },
    18. },
    19. computed: {
    20. iconName() {
    21. return `#icon-${this.iconClass}`;
    22. },
    23. svgClass() {
    24. if (this.className) {
    25. return "svg-icon " + this.className;
    26. } else {
    27. return "svg-icon";
    28. }
    29. },
    30. },
    31. };
    32. </script>
    33. <style scoped>
    34. .svg-icon {
    35. width: 1em;
    36. height: 1em;
    37. vertical-align: -0.15em;
    38. fill: currentColor;
    39. overflow: hidden;
    40. }
    41. </style>

    3.在根目录创建icons,新建一个index.js(全局引入),和新建一个svg目录,专门放svg图片(阿里的iconfont可以下载svg图片)

     index.js的具体代码如下:

    1. import Vue from 'vue'
    2. import SvgIcon from '@/components/svgIcon'// svg组件
    3. // register globally
    4. Vue.component('svg-icon', SvgIcon)
    5. const req = require.context('./svg', false, /\.svg$/)
    6. const requireAll = requireContext => requireContext.keys().map(requireContext)
    7. requireAll(req)

     4.全局引入main.js进行引入

     5.项目需要进行配置vue.config.js

    1. const path = require('path')
    2. module.exports = {
    3. lintOnSave: false,
    4. devServer: {
    5. open: true,
    6. port: 8080,
    7. },
    8. chainWebpack: config => {
    9. const svgRule = config.module.rule('svg')
    10. svgRule.uses.clear()
    11. svgRule
    12. .test(/\.svg$/)
    13. .include.add(path.resolve(__dirname, './src/icons')).end()
    14. .use('svg-sprite-loader')
    15. .loader('svg-sprite-loader')
    16. .options({
    17. symbolId: 'icon-[name]'
    18. })
    19. const fileRule = config.module.rule('file')
    20. fileRule.uses.clear()
    21. fileRule
    22. .test(/\.svg$/)
    23. .exclude.add(path.resolve(__dirname, './src/icons'))
    24. .end()
    25. .use('file-loader')
    26. .loader('file-loader')
    27. }
    28. }

    6.项目中进行使用组件

    注意:icon-class的值直接是svg的文件名。 

     可通过font-size进行大小设置。

  • 相关阅读:
    力扣第 306 场周赛复盘
    用 C# 自己动手编写一个 Web 服务器
    珈创生物上市再次失败:先后折戟科创板、创业板,郑从义为董事长
    [附源码]java毕业设计游戏网站设计
    专利说明书怎么写?
    el-tree-v2中defaultCheckedKeys取消勾选再次点击还有勾选项
    ChatGLM系列五:Lora微调
    GPT4 Plugins 插件 WebPilot 生成抖音文案
    青菜学蒸馒头
    C-模型压缩部署概述
  • 原文地址:https://blog.csdn.net/ld395353765/article/details/125597170