引入icon图标

最新方法:使用svg-sprite-loader引入icon

一.svg-sprite-loader的基本使用

1.在iconfont.cn下载好需要的图标后,把它添加到项目assets里并引入。

那如何引入呢? 🔍typescript svg cannot find module
方法:在系统文件shims-vue.d.ts里添加如下代码

src > shims-vue.d.ts
declare module "*.svg" {const content: any;export default content;
}
components > Nav.vue
<script lang="ts">import icon1 from "@/assets/icons/money.svg";import icon2 from "@/assets/icons/labels.svg";import icon3 from "@/assets/icons/statistics.svg";
//console.log(icon1); /img/label.4b53fd4c.vue
</script>

但是最后得到的是字符串,不符合我们的需求,怎么办?
我们需要一个loader,叫做svg-sprite-loader

svg-sprite-loader文档

2.使用方法:
(1)安装

yarn add svg-sprite-loader -D

(2)添加配置
根据文档的配置要求,需要在webpack.config.js里添加配置。但由于我们的项目里没有这个文件,只有vue.config.js,所以需要按照vue-cli的文档将下面这段内容翻译成我们需要的内容。

// webpack 1 multiple loaders
{test: /\.svg$/,loaders: [`svg-sprite-loader?${JSON.stringify({ ... })}`,'svg-transform-loader','svgo-loader']
}

在vue.config.js中添加翻译后的代码:

src > vue.config.js
const path = require('path') //1.引入nodejs的一个模块,可以用来做pathmodule.exports = {lintOnSave: false,
//2.添加chainWebpackchainWebpack: config => {const dir = path.resolve(__dirname, 'src/assets/icons')//配置loaderconfig.module //config是vue把webpack的api给封装后暴露给我们的一个对象.rule('svg-sprite') //添加一个规则,叫做svg-sprite.test(/\.svg$/) //这个规则的特点:如果能匹配上这个正则就用这个规则(以.svg结尾的).include.add(dir).end() // 只包含icons目录,其它目录一概不走这个规则 .use('svg-sprite-loader').loader('svg-sprite-loader').options({ extract: false }).end()  //使用这个loader(已安装),然后添加一个选项:不要把它解析出文件来,我不需要文件//配置插件config.plugin('svg-sprite').use(require('svg-sprite-loader/plugin'), [{ plainSprite: true }]) // 使用的路径是..., 添加一个选项config.module.rule('svg').exclude.add(dir) //其他svg loader排除icons目录,防止冲突}
}

control+c重启服务器后,我们的body就会创建一个svg标签,这个标签内有很多symbol,每个symbol都有id,并用id作为识别。这时候只要我们import了就可以使用<svg><use xlink:href="#id" /></svg>展示图标。

在这里插入图片描述

3.使用symbol

Nav.vue
<template><div class="nav"><router-link to="/money"><svg><use xlink:href="#money" /></svg> 记账</router-link>|<router-link to="/labels"><svg><use xlink:href="#labels" /></svg> 标签</router-link>|<router-link to="/statistics"><svg><use xlink:href="#statistics" /></svg> 统计</router-link></div>
</template>

在这里插入图片描述

二.优化

1.每个icon都要import太麻烦,能不能直接引入icons文件?
2.这串代码<svg><use xlink:href="#id" /></svg>,能不能也封装成一个组件?

1.如何import一个目录?

components > Nav.vue
<script lang="ts">
// import icon1 from "@/assets/icons/money.svg";
// import icon2 from "@/assets/icons/labels.svg";
// import icon3 from "@/assets/icons/statistics.svg";let importAll = (requireContext: __WebpackModuleApi.RequireContext) =>requireContext.keys().forEach(requireContext);
try { //指定要搜索的路径importAll(require.context("../assets/icons", true, /\.svg$/)); 
} catch (error) {console.log(error);
}
</script>

这段代码就可以实现将一个目录里面任意后缀的文件,统一全部引入到当前文件。

2.封装icon组件
(1)新建组件Icon.vue,代码如下:

components > Icon.vue
<template><div><svg class="icon"><use :xlink:href="'#' + name" /> </svg></div>
</template>
<script lang="ts">
let importAll = (requireContext: __WebpackModuleApi.RequireContext) => requireContext.keys().forEach(requireContext);
try { importAll(require.context("../assets/icons", true, /\.svg$/)); } catch (error) { console.log(error); }export default {name: "Icon",props: ["name"], //添加外部属性
};
</script>

(2)使用组件

components > Nav.vue
<template><div class="nav"><router-link to="/money">//<svg><use xlink:href="#money" /></svg> <Icon name="money" />记账</router-link>|<router-link to="/labels"><Icon name="labels" />标签</router-link>|<router-link to="/statistics"><Icon name="statistics" />统计</router-link></div>
</template>
<script lang="ts">
export default { name: "Nav"};
</script>
main.ts //入口文件
import Icon from "@/components/Icon.vue";
Vue.component("Icon", Icon);

三.解决报错
(1)🔍eslint报错如何解决?
git commit提交代码时报错
error: Require statement not part of import statement
在文件最上面添加eslint-disable,意思是不要提示。

src > vue.config.js
/* eslint-disable */

(2)error: '__WebpackModuleApi' is not defined
在这里插入图片描述

解决方法:.eslintrc.js文件中的rules内添加相关代码,注册后可能还会报错,但不影响我们使用,能够正常commit。

.eslintrc.js
rules: {'globals': {"__WebpackModuleApi": true},
},

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25333.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 更改exe图标显示

1、制作.ico格式图标。 &#xff08;网上有在线转换工具) 2、将制作好的ico图标重新命名&#xff0c;比如&#xff1a;exe._ico.ico,然后拷贝到项目工程.pro相同路径下。 3、在Qt 项目工程文件下.pro。添加一行 : RC_ICONS exe_ico.ico 4、重新构建可执行程序。

震撼来袭,GPT-4全解读

今年3月&#xff0c;OpenAI团队正式宣布&#xff1a;GPT-4 来了&#xff01; 微信搜索关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 OpenAI发布的GPT-4是深度学习方面的最新里程碑。GPT-4是一个大型的多模态模型&#xff08;可接收图像和文本输入…

chatgpt赋能python:Python发短信给手机:一种快速高效的通讯方式

Python 发短信给手机&#xff1a;一种快速高效的通讯方式 在当今数字化的时代&#xff0c;手机已成为人们日常生活不可或缺的一部分。然而&#xff0c;对于那些需要快速高效地与手机用户进行通讯的人们来说&#xff0c;传统的打电话和发送短信的方式则显得有些过于繁琐。对于这…

chatgpt赋能python:如何使用Python读取手机短信

如何使用Python读取手机短信 在现代社会&#xff0c;短信已成为人们生活中不可或缺的一部分。那么&#xff0c;如何利用Python读取手机短信呢&#xff1f;本文将介绍如何使用Python读取手机短信&#xff0c;并提出一些相关的建议。 什么是Python Python是一种高级的、开源的…

chatgpt赋能python:Python如何免费群发短信

Python如何免费群发短信 在数字化时代&#xff0c;短信成为了快速高效的沟通方式之一。针对群发短信需求&#xff0c;市场上存在着多种短信群发软件&#xff0c;而Python作为一个强大的编程工具&#xff0c;也可以轻松实现免费的短信群发功能。本篇文章将为大家介绍如何通过Py…

chatgpt赋能python:Python短信通知:方便快捷的业务提醒方式

Python短信通知&#xff1a;方便快捷的业务提醒方式 在现代社会&#xff0c;很多企业和组织需要及时地向员工、客户和用户发送通知&#xff0c;以便于协调业务和提高效率。而短信通知作为一种常用的业务提醒方式&#xff0c;已经成为了很多组织中不可或缺的一部分。Python语言…

北京十大律师事务所(排名涉及刑事、拆迁婚姻)

无论任何行业&#xff0c;首先要敬业。你需要了解&#xff1a;这个行业是干什么的&#xff1f;你在行业中处于什么地位&#xff1f;这个行业在社会各界的地位和价值如何&#xff1f;它的基本价值观是什么&#xff1f;作为律师&#xff0c;首先要对行业有敬畏感、尊崇感&#xf…

中国裁判文书网(2020最新版)

1.序言 因业务需要去爬取裁判文书网&#xff0c;查看了网上的诸多教程发现裁判文书网的反爬更新频率很高&#xff0c;但是从19年8月份更新之后再也没有新的更新了。估计是现在的反爬已经足够使用了&#xff0c;裁判文书网的反爬主要有四种。听我一一道来 2.正文 裁判文书网的…

甄选北京十大律师事务所排名榜(资深团队、胜诉率高)

根据司法部数据统计得知&#xff0c;截至2022年第三季度&#xff0c;全国共有执业律师50万多人。全国共有律师事务所4万多家。律师行业正在正确的轨道蓬勃发展中。我们期待律师行业的不断壮大和发展&#xff0c;也希望更多的人能通过法律途径维护自己的合法权益。 大家都知道北…

违反 GPL 协议,法院判罚了!国内首例

公众号关注 “GitHub科技” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 来自开源中国 近日&#xff0c;一起关于 GPL 版权纠纷案裁判文书公示。一审判决书显示&#xff0c;GPL3.0 协议是一种民事法律行为&#xff0c;具有合同性质&#xff0c;可认定为授权人与用…

律师也要职业危机?ChatLaw帮助普通人拥有自己的法律顾问

ChatLaw法律大模型近期出圈&#xff0c;发布上线当日即登顶知乎热搜榜第一&#xff0c;在Github已有近3k的star&#xff0c;被网友戏称之为大型模型中的“罗翔老师”。 ChatLaw法律大模型介绍 ChatLaw开源法律大模型来自北京大学ChatExcel课题组&#xff0c;目前仅提供学术参考…

同行涉嫌数据抄袭、商业诋毁和人身攻击,甚至向我们的法人推销,你会怎么办?...

补充说明一下&#xff0c;上一篇发表之后&#xff0c;已经有阿里云以及阿里巴巴的人联系到我&#xff0c;说内部正在彻查此事&#xff0c;一定会给我一个结果。我的态度是当然欢迎&#xff0c;但希望不要把彻查变成一个公关用语&#xff0c;必要的情况下&#xff0c;我们也可以…

违反GPL协议,法院判罚了!国内首例

整理 | 一君 出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09; 近日&#xff0c;一起关于 GPL 版权纠纷案裁判文书公示。一审判决书显示&#xff0c;GPL3.0 协议是一种民事法律行为&#xff0c;具有合同性质&#xff0c;可认定为授权人与用户间订立的著作…

自然人如何在浙江法院网上完成诉讼——具体流程

起诉状模版下载链接&#xff1a;https://download.csdn.net/download/weixin_42574872/86264435 一、进入浙江法院官网注册与登录 1.浙江法院官网&#xff1a;http://www.zjsfgkw.cn/&#xff0c;点击进入后进入图1-1。 图 1-1 2.在图1-1点击登录后进入&#xff0c;进入图1-2…

区块链赋能律所非诉业务研究报告 | TokenInsight金杜律师事务所

近年来&#xff0c;围绕提高司法效率&#xff0c;改良司法程序&#xff0c;增强司法手段透明度和公信力开展的区块链项目研究越来越多&#xff0c;国内外应用落地情况良好。 2018年9月7日&#xff0c;最高人民法院公布了《最高人民法院关于互联网法院审理案件若干问题的规定》&…

用了一下AI代码补全工具,真爽!

前言 ChatGPT把AI带火了&#xff0c;我就在想&#xff0c;能用它做点什么呢&#xff0c;总不能只让它给我们带来焦虑&#xff0c;也要让我们从科技浪潮中分得一点红利吧。一番查找下来&#xff0c;有个功能对我们程序员来说比较实用&#xff0c;就是AI的代码提示补全功能。最先…

「料见」vol25.回顾 | PKU-Beaver开源项目团队:一起来聊首个可复现的RLHF基准

为了解决复现RLHF技术和基于RLHF技术的大预言模型的不安全问题&#xff0c;北京大学团队开源了名为PKU-Beaver&#xff08;海狸&#xff09;开源项目。 第25期料见闭门分享会&#xff0c;我“门”非常开心邀请到PKU-Beaver开源项目团队成员——北京大学人工智能研究院助理教授…

聊一下计算机程序员转行情感博主

(点击即可收听) 不知不觉&#xff0c;已经入行这行业第7个年头 现在身边一些00后也步入职场&#xff0c;看到他们那种初生牛犊不怕虎&#xff0c;想到了当年的自己职场当中的人来人往&#xff0c;铁打的营盘&#xff0c;流水的兵 早就已经习惯了&#xff0c;毕竟天下没有不散宴…

Reactive响应式编程系列:解密Lettuce如何实现响应式

响应式编程历史悠久&#xff0c;早在2005年&#xff0c;Microsoft Cloud Programmability Team 开始探索一种简单的编程模型&#xff0c;以构建大规模的异步和数据密集型互联网服务架构&#xff0c;响应式编程的理念逐步诞生。这本是为了解决服务端系统而提出的理念&#xff0c…

深度学习入门学习小记录5——【Pytorch】,模型推理间隔较大时,推理耗时增加且存在波动

目录 前言 ChatGPT的回答&#xff1a; 实际测试 解决方法&#xff1a; 来自chatGPT的解答&#xff1a; 前言 最近在进行模型部署的工作&#xff0c;比较关注模型的推理耗时&#xff0c;发现相同的模型在推理时存在耗时波动。所以做了一些小测试&#xff0c;并做一下经验记…