Vue3(基于ts)操作svg图片

一、 安装 svg-sprite-loader

  npm install svg-sprite-loader

二、自定义SvgIcon 组件

<template>
	<svg
		class="svg-icon"
		:style="{
			width: props.size + 'px',
			height: (props.height || props.size) + 'px',
			color: props.color,
		}"
	>
		<use :xlink:href="`#icon-${props.name}`" :fill="props.color" />
	</svg>
</template>

<script lang="ts" setup>
import { defineProps, withDefaults } from 'vue'
const props = withDefaults(
	defineProps<{
		size: number
		height: number
		color: string
		name: string
	}>(),
	{
		color: '#000',
	}
)
</script>

三、在vue.config.js 中配置

	chainWebpack: (config) => {
		//#region 配置 svg组件加载start
		const svgRule = config.module.rule('svg') // 找到svg-loader
		//清除已有的loader,不这样做会添加到此loader之后,svg-sprite-loader不会生效
		svgRule.uses.clear()
		// 正则匹配排除node_modules目录
		svgRule.exclude.add(/node_modules/) 
		svgRule
			.use('svg-sprite-loader')
			.loader('svg-sprite-loader')
			.options({
				symbolId: 'icon-[name]',
			})
			.end()
		//#endregion
	},

四、在main.ts 中配置

import SvgIcon from "./components/SvgIcon.vue"
const app=createApp(App);
//注册全局组件
app.component('svg-icon',SvgIcon)
const requireAll = (requireContext:any)=> requireContext.keys().map(requireContext)

const req = require.context('./assets/svg', false, /\.svg$/)
requireAll(req)

app.use(router)
app.mount('#app')

五 调用

<svg-icon name="jsc-header-leftarrow" :size="24"></svg-icon>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值