vue3.x学习笔记之项目实战 — 如何使用SVG图片

  • • 使用vite显示本地svg图标

      • • vite-plugin-svg-icons 使用

        • • 安装 vite-plugin-svg-icons

        • • 配置SVG图片文件夹

        • • 项目根目录查找vite.config.js,进行配置

        • • vite-plugin-svg-icons插件引入在main.js中

        • • 新建svg封装组件

        • • 按需引入使用

        • • 全局引入使用

使用vite显示本地svg图标

vite-plugin-svg-icons 使用

npm 地址:https://www.npmjs.com/package/vite-plugin-svg-icons

安装 vite-plugin-svg-icons

npm i vite-plugin-svg-icons -D
// 或者
yarn add vite-plugin-svg-icons -D

配置SVG图片文件夹

vue3.x学习笔记之项目实战 -- 如何使用SVG图片

在项目根目录查找vite.config.js,进行配置

//import path,{ resolve } from 'path'
import path from 'path'
import {createSvgIconsPlugin} from 'vite-plugin-svg-icons'
 
export default defineConfig((command) => {
 return {
    plugins: [
      createSvgIconsPlugin({
        // 指定要缓存的文件夹
        iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
        // 指定symbolId格式
        symbolId'[name]'
      })
    ],
}
 
})

vite-plugin-svg-icons插件引入在main.js中

import 'virtual:svg-icons-register'

新建svg封装组件

<template>
  <svg :class="svgClass" aria-hidden="true">
    <use class="svg-use" :href="symbolId" />
  </svg>
</template>

<script setup lang="ts"
const props = defineProps<{
  prefix: {
    typeString;
    default"icon";
  };
  name: {
    typeString;
    requiredtrue;
  };
  className: {
    typeString;
    default"";
  };
}>();

const symbolId = computed(() => `#${props.name}`);
const svgClass = computed(() => {
  if (props.className) {
    return `svg-icon ${props.className}`;
  }
  return "svg-icon";
});
</script>

按需引入使用

<template> 
  <SvgIcon name="issue"></SvgIcon
</template>
 
<script setup>
import SvgIcon from "@/components/SvgIcon.vue";
</script>

全局引入使用

在main.js中加入

import svgIcon from './components/svgIcon/index.vue'
createApp(App).component('svg-icon', svgIcon)

组件中使用

<template>
  <template v-for="item in routes" :key="item.path">
    <a-menu-item :key="item.path" v-if="!item.children || item.children.length === 0">
      <template #icon
        <SvgIcon class="aaa" style="width: 14px; height: 14px" :name="item.meta.icon"  v-if="item.meta && item.meta.icon"></SvgIcon>
      </template>
      <span>{{ item.meta?.title }}</span>
    </a-menu-item
  </template>
</template>

<script setup lang="ts">
defineOptions({
  name"menuItem",
});
defineProps<{ routesArray<RouteRecordRaw> }>();
</script>

参考文档

  • • https://blog.csdn.net/weixin_53731501/article/details/125478380


原文始发于微信公众号(前端爱好者):vue3.x学习笔记之项目实战 — 如何使用SVG图片

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/267197.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!