已解决
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 结构(js创建的)包含所有图标,理解为
- 怎么使用svg图标?
- 通过 svg 标签
#icon-文件夹名称-图片名称
指定图片,理解精灵图定位坐标
- 通过 svg 标签
【坑】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%的人还看了
相似问题
- Android 13.0 无源码app修改它的icon图标
- Markdown使用emoji图标【美化你的文章】
- svg图标最简单的使用方式
- Android 13.0 Launcher3仿ios长按app图标实现抖动动画开始拖拽停止动画
- Flutter笔记:光影动画按钮、滚动图标卡片组等
- IDEA 关闭SpringBoot启动Logo/图标
- 桌面此电脑图标不见了的解决办法
- Vue3:自定义图标选择器(包含 SVG 图标封装)
- 小程序 打开方式 页面效果 表单页面 点击跳到详情页 图标 获取后台数据 进行页面渲染
- vue 集成高德地图,点击图标,弹出van-action-sheet,一闪而过的问题探究
猜你感兴趣
版权申明
本文"vue3中使用svg并封装成组件":http://eshow365.cn/6-24928-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!