码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • vue3+vite项目中使用svgIcon


    如何在vue2+webpack项目中使用svgIcon?参考:手摸手,带你优雅的使用 icon - 掘金

    这篇文章主要介绍如何在vue3项目中优雅的使用图标

    1、安装插件

    node version: >=12.0.0

    vite version: >=2.0.0

    npm i vite-plugin-svg-icons -D

     插件地址:GitHub - vbenjs/vite-plugin-svg-icons: Vite Plugin for fast creating SVG sprites.

    2、配置 vite.config.ts

    1. //插件引入
    2. import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
    3. import path from 'path'
    4. plugins: [
    5. vue(),
    6. Components({
    7. // UI库
    8. resolvers: [ArcoResolver()],
    9. }),
    10. createSvgIconsPlugin({
    11. // 指定需要缓存的图标文件夹
    12. iconDirs: [path.resolve(process.cwd(), "src/assets/icons")],
    13. // 指定symbolId格式
    14. symbolId: "icon-[name]",
    15. /**
    16. * 自定义插入位置
    17. * @default: body-last
    18. */
    19. // inject?: 'body-last' | 'body-first'
    20. /**
    21. * custom dom id
    22. * @default: __svg__icons__dom__
    23. */
    24. // customDomId: '__svg__icons__dom__',
    25. }),
    26. ],

    3、配置 tsconfig.json

    如果你使用的 Typescript, 可以在 tsconfig.json 配置文件中添加

    1. // tsconfig.json
    2. {
    3. "compilerOptions": {
    4. "types": ["vite-plugin-svg-icons/client"]
    5. }
    6. }
    4、封装SvgIcon组件 src/components/SvgIcon
    1. <script>
    2. import { defineComponent, computed } from 'vue'
    3. export default defineComponent({
    4. name: 'SvgIcon',
    5. props: {
    6. prefix: {
    7. type: String,
    8. default: 'icon',
    9. },
    10. iconClass: {
    11. type: String,
    12. required: true,
    13. },
    14. className: {
    15. type: String,
    16. default: ''
    17. },
    18. color: {
    19. type: String,
    20. default: '#333',
    21. },
    22. },
    23. setup(props) {
    24. const symbolId = computed(() => `#${props.prefix}-${props.iconClass}`)
    25. const svgClass = computed(() => {
    26. if (props.className) {
    27. return 'svg-icon ' + props.className
    28. } else {
    29. return 'svg-icon'
    30. }
    31. })
    32. return { symbolId ,svgClass}
    33. },
    34. })
    35. script>
    36. <style scoped>
    37. .svg-icon {
    38. width: 1em;
    39. height: 1em;
    40. vertical-align: -0.15em;
    41. fill: currentColor;
    42. overflow: hidden;
    43. }
    44. .svg-external-icon {
    45. background-color: currentColor;
    46. mask-size: cover!important;
    47. display: inline-block;
    48. }
    49. style>

    5、同文件夹下创建 index.ts

    1. import { App } from "vue";
    2. import SvgIcon from "./SvgIcon";
    3. import "virtual:svg-icons-register";
    4. const svgIconPlugin = {
    5. install(app: App): void {
    6. // 全局挂载
    7. app.component("svg-icon", SvgIcon);
    8. },
    9. };
    10. export default svgIconPlugin;

    6、全局注册 main.ts

    1. import { createApp } from "vue";
    2. import App from "./App.vue";
    3. import router from "./router/router";
    4. // svg封装插件
    5. import svgIcon from "@/components/svgIcon";
    6. createApp(App)
    7. .use(router)
    8. .use(svgIcon)
    9. .mount("#app");

    7、组件中使用 

    1. // 只需name绑定成icons目录下的svg文件名即可
    2. class="heSuan" />

  • 相关阅读:
    10. 项目沟通管理与干系人管理
    华为云企业应用上云解决方案,为企业排忧解难
    2022年11月 Ubuntu 18.04 ROS Melodic 安装教程
    硬盘分区,拓展C盘,不重装系统,不重装D盘软件的全教程。
    uniapp读取和写入文件
    Apache Inlong:数据集成框架原理及实践
    百度面试题:为什么使用接口而不是直接使用具体类?
    PostgreSql 统一修改date字段为timestamp
    深度学习 Day 14——利用卷神经网络实现运动鞋品牌识别
    代码阅读:LanGCN
  • 原文地址:https://blog.csdn.net/hdchangchang/article/details/133846757
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号