当前位置: 首页 > news >正文

第6讲自定义icon实现

自定义icon实现

component下新建SvgIcon目录,再新建index.vue 定义svg-icon组件
在这里插入图片描述

<template><svg class="svg-icon" aria-hidden="true"><use :xlink:href="iconName"></use></svg>
</template><script setup>
import { defineProps, computed } from 'vue'
const props = defineProps({icon: {type: String,required: true}
})const iconName = computed(() => {return `#icon-${props.icon}`
})
</script><style lang="scss" scoped>
.svg-icon {width: 1em;height: 1em;vertical-align: -0.15em;fill: currentColor;overflow: hidden;
}
</style>

新建icons文件夹,放一个svg文件的文件夹目录,以及新建index.js,全局定义组件

在这里插入图片描述

import SvgIcon from '@/components/SvgIcon'const svgRequired = require.context('./svg', false, /\.svg$/)
svgRequired.keys().forEach((item) => svgRequired(item))export default (app) => {app.component('svg-icon', SvgIcon)
}

安装依赖 webpack

在这里插入图片描述
安装依赖 svg-sprite-loader

在这里插入图片描述

vue.config.js

const webpack = require('webpack');const path = require('path')
function resolve(dir) {return path.join(__dirname, dir)
}module.exports = {lintOnSave: false,chainWebpack(config) {// 设置 svg-sprite-loader// config 为 webpack 配置对象// config.module 表示创建一个具名规则,以后用来修改规则config.module// 规则.rule('svg')// 忽略.exclude.add(resolve('src/icons'))// 结束.end()// config.module 表示创建一个具名规则,以后用来修改规则config.module// 规则.rule('icons')// 正则,解析 .svg 格式文件.test(/\.svg$/)// 解析的文件.include.add(resolve('src/icons'))// 结束.end()// 新增了一个解析的loader.use('svg-sprite-loader')// 具体的loader.loader('svg-sprite-loader')// loader 的配置.options({symbolId: 'icon-[name]'})// 结束.end()config.plugin('ignore').use(new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /zh-cn$/))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()}
}

main.js修改:

import SvgIcon from '@/icons'const app=createApp(App)
SvgIcon(app);app.use(store)app.use(router)app.use(ElementPlus)
app.mount('#app')

使用语法:

<template #prefix><svg-icon icon="user" /></template>
<el-form-item prop="username"><el-inputtype="text"size="large"auto-complete="off"placeholder="账号"><template #prefix><svg-icon icon="user" /></template></el-input>
</el-form-item>

在这里插入图片描述

http://www.lryc.cn/news/302437.html

相关文章:

  • 花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车
  • AUTOSAR OS TASK
  • 陇剑杯 2021刷题记录
  • 前端常见的设计模式
  • OpenAI视频生成模型Sora的全面解析:从ViViT、扩散Transformer到NaViT、VideoPoet
  • 3个密码学相关的问题
  • 5G网络eMBB、uRLLC、mMTC
  • matplotlib图例使用案例1.1:在不同行或列的图例上添加title
  • nginx 日志改为json格式
  • 【DDD】学习笔记-应用服务
  • 【医学大模型】MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化,便于LLM理解和应用
  • YOLOV8改进系列指南
  • FlinkSql一个简单的测试程序
  • 二、ActiveMQ安装
  • 通俗易懂的L0范数和L1范数及其Python实现
  • 如何在30天内使用python制作一个卡牌游戏
  • VsCode指定插件安装目录
  • 解决npm淘宝镜像到期问题
  • 【JAVA】java泛型 详解
  • 基于RBAC的权限管理的理论实现和权限管理的实现
  • Atcoder ABC340 C - Divide and Divide
  • 趣学贝叶斯统计:概率密度分布(probability density function)
  • 伦敦金行情分析需要学习吗?
  • Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL
  • 服务器遭受 DDoS 攻击的常见迹象有哪些?
  • 【机器学习笔记】 15 机器学习项目流程
  • 【C语言】位操作符与移位操作符练习
  • 第十四届“中关村青联杯”全国研究生数学建模竞赛-A题:无人机在抢险救灾中的优化运用
  • Android 9.0 Launcher3桌面显示多个相同app图标的解决办法
  • WordPress主题YIA在广告位添加图片广告时下方有空白怎么办?