如何在新项目使用svg-icon组件

1.安装依赖   npm i svg-sprite-loader@4.1.3

2.配置 vue.config.js  (补充)

chainWebpack(config) {
   config.module
      .rule('svg')
      .exclude.add(resolve('src/icons'))
      .end()
    config.module
      .rule('icons')
      .test(/\.svg$/)
      .include.add(resolve('src/icons'))
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'
      })
      .end()

}

3.复制/创建文件

①src/icon  保存图标 并且注册全局组件

import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg component

// register globally
Vue.component('svg-icon', SvgIcon)

const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)

 ②组件  componets/SvgIcon/index.vue

<template>
  <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
  <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="iconName" />
  </svg>
</template>

<script>
// doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage
import { isExternal } from '@/utils/validate'
export default {
  name: 'SvgIcon',
  props: {
    iconClass: {
      type: String,
      required: true
    },
    className: {
      type: String,
      default: ''
    }
  },
  computed: {
    isExternal() {
      return isExternal(this.iconClass)
    },
    iconName() {
      return `#icon-${this.iconClass}`
    },
    svgClass() {
      if (this.className) {
        return 'svg-icon ' + this.className
      } else {
        return 'svg-icon'
      }
    },
    styleExternalIcon() {
      return {
        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
      }
    }
  }
}
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}

.svg-external-icon {
  background-color: currentColor;
  mask-size: cover !important;
  display: inline-block;
}
</style>

③新建validate.js (utils/validate.js)

export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}

4.在main.js中引入

import '@/icons' // icon

5.使用

使用格式<svg-icon icon-class="文件名"/> 。这里的文件名就是在src/icons/svg下的文件名

### 如何在 UniApp 项目中正确使用 SVG 图标 为了在 UniApp 中集成并使用自定义的 SVG 图标,可以采用一种类似于 Vite 插件的方式处理图标资源。然而,在 UniApp 的上下文中,通常会利用 `uni-icons` 组件来显示内置或自定义图标。 #### 使用 `createSvgIconsPlugin` 尽管上述配置适用于基于 Vite 构建工具的 Vue 或 React 应用程序[^1],UniApp 并不直接支持此插件。因此,对于 UniApp 来说,实现类似功能的方法略有不同: #### 创建和引入自定义 SVG 图标库 考虑到 UniApp 对 Webpack 和 HBuilderX 编译器的支持,可以通过创建一个独立的 JavaScript 文件(例如 `icons.js`),用于加载所有的 SVG 路径数据,并通过 CSS 定义这些图标的样式[^2]。 ```javascript // icons.js import '@/static/iconfont/iconfont.css'; // 假设这是你存放SVG图标的CSS文件路径 export function loadIcons() { console.log('Custom Icons Loaded'); } ``` 接着,在项目的入口文件 `main.js` 中导入这个函数: ```javascript // main.js import { loadIcons } from './utils/icons'; loadIcons(); ``` #### 利用 `uni-icons` 显示自定义图标 当准备好了自己的图标集之后,就可以借助 `<uni-icons>` 组件展示它们了。需要注意的是,如果要添加新的图标到应用里,则应该按照官方文档指示操作——即设置好对应的 Unicode 字符串作为属性传递给该组件。 ```html <template> <view class="content"> <!-- 这里的type对应于你在iconfont.cn上获取的class名 --> <uni-icons type="custom-icon-name" size="30"></uni-icons> </view> </template> <script setup lang="ts"> </script> <style scoped> /* 如果有额外样式需求 */ .content {} </style> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值