当前位置:首页 > 编程笔记 > 正文
已解决

vue3中使用svg并封装成组件

来自网友在路上 132832提问 提问时间:2023-10-26 08:25:10阅读次数: 32

最佳答案 问答题库328位专家为你答疑解惑

打包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>

类型 types/components.d.ts

import CpIcon from '@/components/CpIcon.vue'declare module 'vue' {interface GlobalComponents {CpIcon: typeof CpIcon}
}

使用:

<script setup lang="ts">import CpIcon from '@/components/CpIcon.vue' 
</script><template><cp-icon name="login-eye-off"></cp-icon>
</template>
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"vue3中使用svg并封装成组件":http://eshow365.cn/6-24928-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!