当前位置: 首页 > news >正文

vue3中使用svg并封装成组件

打包svg地图

  • 安装插件

    yarn add vite-plugin-svg-icons -D
    # or
    npm i vite-plugin-svg-icons -D
    # or
    pnpm install vite-plugin-svg-icons -D
    
  • 使用插件

    vite.config.ts

    import { VantResolver } from 'unplugin-vue-components/resolvers'
    +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
    +import path from 'path'// https://vitejs.dev/config/
    export default defineConfig({plugins: [vue(),Components({dts: false,resolvers: [VantResolver({ importStyle: false })]}),
    +    createSvgIconsPlugin({
    +      // 指定图标文件夹,绝对路径(NODE代码)
    +      iconDirs: [path.resolve(process.cwd(), 'src/icons')]
    +    })],
    
  • 导入到main

    +import 'virtual:svg-icons-register'
    
  • 使用svg精灵地图

        <svg aria-hidden="true"><!-- #icon-文件夹名称-图片名称 --><use href="#icon-login-eye-off" /></svg>
    

    在这里插入图片描述

小结:

  • icons文件打包的产物?
    • 会生成一个 svg 结构(js创建的)包含所有图标,理解为 精灵图
  • 怎么使用svg图标?
    • 通过 svg 标签 #icon-文件夹名称-图片名称 指定图片,理解 精灵图定位坐标

【坑】vite-plugin-svg-icons报错:Cannot find package ‘fast-glob’

在这里插入图片描述

自行安装一下fast-glob依赖解决该问题

yarn add fast-glob -D

图标组件-封装svg组件

组件 components/CpIcon.vue

<script setup lang="ts">
// 提供name属性即可
defineProps<{name: string
}>()
</script><template><svg aria-hidden="true" class="cp-icon"><use :href="`#icon-${name}`" /></svg>
</template><style lang="scss" scoped>
.cp-icon {// 和字体一样大width: 1em;height: 1em;
}
</style>

如果使用了 unplugin-vue-components 默认 src/compoenents 自动导入注册;
给组件添加类型,让写属性和事件可以有提示
类型 types/components.d.ts

// 1. 导入组件实例
import CpIcon from '@/components/CpIcon.vue'
// 2. 声明 vue 类型模块
declare module 'vue' {
// 3. 给 vue  添加全局组件类型,interface 和之前的合并interface GlobalComponents {// 4. 定义具体组件类型,typeof 获取到组件实例类型// typeof 作用是得到对应的TS类型CpIcon: typeof CpIcon}
}

使用:

<template><cp-icon name="login-eye-off"></cp-icon>
</template>
http://www.lryc.cn/news/206664.html

相关文章:

  • 实验六:DHCP、DNS、Apache、FTP服务器的安装和配置
  • Python实验项目4 :面对对象程序设计
  • 用html、css和jQuery实现图片翻页的特效
  • awk 框架
  • 专业135总分400+西安交通大学信息与通信工程学院909/815考研经验分享
  • 在 Windows 用 Chrome System Settings 设置代理
  • Excel多线程导入数据库
  • Linux开机默认进入命令行或图形化模式
  • ajax请求的时候get 和post方式的区别?
  • 还不知道光场相机吗?
  • 软信天成:助力某制造企业建设产品主数据管理平台案例分享
  • C#WPFPrism框架导航应用实例
  • Centos安装gitlabce
  • android8.1- Show virtual keyboard 默认打开
  • 打印机连接网络后怎么安装驱动?
  • 光流法动目标检测
  • 【机器学习合集】泛化与正则化合集 ->(个人学习记录笔记)
  • 软考高级之系统架构师之数据流图和流程图
  • CVPR2023新作:基于组合空时位移的视频修复
  • 我的Windows10下的WSL的使用经历
  • 人声分离神仙网站,用过都说好~
  • 通过流量安全分析发现主机异常
  • 如何设计实时聊天系统的架构
  • js sm4实现加密解密
  • 安装 fcitx + 搜狗/谷歌输入法 之后导致 四季,重启后黑屏只有鼠标可以移动
  • kuaishou web端did注册激活 学习记录
  • Docker安装MariaDB
  • Uniapp中嵌入H5( uniapp开发的H5),并且在H5中跳转到APP的指定页面
  • 汽车托运哪个平台好
  • TailwindCSS使用并开启JIT(vue2)