Vue项目使用svg图标实践

Vue项目使用SVG图标实践

本文主要介绍在Vue项目中如何使用SVG图标,并提供两个示例说明。

集成SVG图标

  • 安装svg-sprite-loader

svg-sprite-loader将svg文件打包成单个svg sprite,该svg sprite可以通过样式或相关API的方式在您的应用程序中使用。

npm install svg-sprite-loader --save-dev
  • 配置webpack

在 webpack.config.js 添加如下代码:

module.exports = {
  module: {
    rules: [
      {
        test: /\.svg$/,
        loader: 'svg-sprite-loader',
        options: {
          // 配置svg-sprite-loader
          symbolId: 'icon-[name]',
        },
      },
    ],
  },
};

添加完毕后,打开 .vue 文件,使用以下代码导入并使用svg图标。

<template>
  <div>
    <svg class="icon">
      <use xlink:href="#icon-svg"></use>
    </svg>
  </div>
</template>

<script>
export default {
  name: 'svg-icon',
  props: {
    iconClass: {
      type: String,
    },
  },
};
</script>

<style>
  .icon {
    width: 1em;
    height: 1em;
    vertical-align: -0.15em;
    fill: currentColor;
    overflow: hidden;
  }
</style>

示例

示例一:使用已有的svg图片

在项目中使用已经存在的SVG图片,此示例使用的SVG图标在public文件夹的img目录中。

  • 项目结构
|-- public
    |-- img
        |-- icon.svg
|-- src
    |-- views
        |-- Home.vue
  • Home.vue 文件
<template>
  <div class="home">
    <svg-icon class="heart-icon" icon-class="heart"></svg-icon>
  </div>
</template>

<script>
import SvgIcon from "@/components/SvgIcon.vue";

export default {
  components: {
    SvgIcon,
  },
};
</script>

<style scoped>
.heart-icon {
  width: 30px;
  height: 30px;
}
</style>
  • SvgIcon.vue 文件
<template>
  <svg class="svg-icon" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="`#icon-${iconClass}`" />
  </svg>
</template>

<script>
export default {
  name: "SvgIcon",
  props: {
    iconClass: {
      type: String,
      required: true,
    },
  },
};
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>
  • webpack.config.js 文件
const path = require("path");

function resolve(dir) {
  return path.join(__dirname, dir);
}

module.exports = {
  chainWebpack: (config) => {
    const svgRule = config.module.rule("svg");
    svgRule.uses.clear();
    svgRule.exclude.add(resolve("src/icons"));
    svgRule.include.add(resolve("public/img"));
    svgRule
      .test(/\.svg$/)
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
      });
  },
};

示例二:自定义SVG图标

使用iconfont自定义图标,步骤如下:

  1. 登录 iconfont
  2. 新建项目,并添加图标
  3. 在项目中下载SVG文件

  4. 项目结构

|-- src
    |-- icons
        |-- svg
            |-- custom-svg.svg
    |-- views
        |-- Home.vue
  • custom-svg.svg

上传至icons/svg文件夹中,该文件将被作为自定义SVG图标文件。

  • Home.vue 文件
<template>
  <div class="home">
    <svg-icon class="phone-icon" icon-class="custom-svg"></svg-icon>
  </div>
</template>

<script>
import SvgIcon from "@/components/SvgIcon.vue";

export default {
  components: {
    SvgIcon,
  },
};
</script>

<style scoped>
.phone-icon {
  width: 30px;
  height: 30px;
}
</style>
  • SvgIcon.vue 文件
<template>
  <svg class="svg-icon" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="`#icon-${iconClass}`" />
  </svg>
</template>

<script>
export default {
  name: "SvgIcon",
  props: {
    iconClass: {
      type: String,
      required: true,
    },
  },
};
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>
  • webpack.config.js 文件

vue.config.js中,添加如下代码:

module.exports = {
  chainWebpack: (config) => {
    const svgRule = config.module.rule("svg");
    svgRule.uses.clear();
    svgRule.exclude.add(resolve("src/icons/svg"));
    svgRule.include.add(resolve("src/icons/svg"));
    svgRule
      .test(/\.svg$/)
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
      });
  },
};

总结

使用SVG图标,可以使网站在任何分辨率下都拥有出色的图形,而且不会失帧或失去其矢量几何图形。本文介绍了在Vue项目中集成SVG图标的步骤,并提供了两个示例,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue项目使用svg图标实践 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue 结合Sortablejs实现table行排序功能

    当我们需要对表格中的数据进行排序时,我们可以使用Vue结合Sortablejs库来实现。Sortablejs是一个支持拖放排序的JavaScript库,它可以与Vue框架配合使用,使我们可以很容易地对表格的行进行排序。 以下是Vue结合Sortablejs实现table行排序功能的完整攻略: 第一步:安装Sortablejs 我们可以使用npm包管理工具来安…

    Vue 2023年5月27日
    00
  • vue中使用Axios最佳实践方式

    下面就是关于”vue中使用Axios最佳实践方式”的完整攻略: 确定请求的方式 在使用Axios时,我们需要确定请求的方式,可以使用get、post、put、delete等方式,同一个接口的不同请求方式可以得到不同的数据。如需向后端发起请求,需要在axios对象中添加请求方式,具体操作如下: import axios from ‘axios’ // 设置请求…

    Vue 2023年5月28日
    00
  • vuex(vue状态管理)的特殊应用案例分享

    下面我给您详细讲解一下“Vuex(Vue状态管理)的特殊应用案例分享”的完整攻略。 什么是Vuex Vuex是Vue.js的状态管理模式和库,它可以将数据存储到一个全局的状态树中,并通过一个可预测的方式修改这些数据。Vuex主要解决了多个组件之间数据共享、组件通信等问题。 Vuex的使用场景 在Vuex中可以管理组件的状态,这些状态可以在组件之间共享,在开发…

    Vue 2023年5月27日
    00
  • Vue3初始化如何调用函数

    Vue3的初始化过程是在 createApp 函数中完成的。在这个函数中,可以调用一些辅助函数来进行初始化操作,例如创建根组件、挂载到DOM等。若要在初始化过程中调用函数,可以使用 beforeCreate 生命周期函数或者 setup() 函数。 使用 beforeCreate 生命周期函数 beforeCreate 生命周期函数是在组件创建之前被调用的,…

    Vue 2023年5月27日
    00
  • vue.js学习笔记之绑定style样式和class列表

    下面是“vue.js学习笔记之绑定style样式和class列表”的完整攻略: 绑定style样式 在Vue.js中,我们可以使用v-bind:style指令来绑定样式。这个指令可以接受一个对象或者是一个返回样式对象的方法。对象中的属性名是样式名,属性值是相应的样式值。 对象语法 对象语法的样式绑定方式相对简单而直观。 <div v-bind:styl…

    Vue 2023年5月29日
    00
  • Vue NextTick介绍与使用原理

    Vue NextTick介绍与使用原理 Vue NextTick是Vue提供的一个API, 用于在DOM更新后执行异步回调。在前端开发中,我们经常遇到需要在DOM更新完毕后,再执行一些操作的场景,例如修改某个元素的高度或宽度等。这时候,就需要用到Vue NextTick。 NextTick使用方法 Vue中,我们可以通过以下方式使用Vue NextTick:…

    Vue 2023年5月28日
    00
  • Vue组件化(ref,props, mixin,.插件)详解

    接下来我将为大家详细讲解Vue组件化(ref, props, mixin, 插件)的攻略。 什么是Vue组件化 Vue组件是一个可复用的Vue实例,具有接受和渲染数据的能力。组件通常用于构建Web页面中具有可复用的模块化结构的元素,如侧边栏、导航栏、底部栏等。Vue组件化使得Web页面中的HTML元素和JavaScript代码有了更加清晰的分离和组织体系,能…

    Vue 2023年5月28日
    00
  • vue 解决数组赋值无法渲染在页面的问题

    当 Vue 绑定的数据是一个数组时,使用原生的赋值方式(例如 array[0] = newValue)并不会触发组件的重新渲染,因为 Vue 无法识别这种方式的数据变动。为了解决这种问题,需要使用 Vue 提供的特殊方法,或在代码层面做出一些调整。 下面是解决数组赋值无法渲染在页面的问题的完整攻略: 1. 使用特殊方法进行数组数据更新 Vue 提供了一些特殊…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部