VueTSX 动态使用 element-plus 图标
写 TSX 的目的
element-plus 图标集有很多,但有时需要动态使用某个图标,把所有可能用到的图标都列举出来,通过 v-if 在组件中决定到底渲染哪一个,很费时。
.vue 单文件组件中做不到的,可以尝试用 TSX 和渲染函数来做。比如,我想做一个底部有文字的图标,其实可以通过插槽把图标插入到组件中:
<div class="header f-c-s">
<TextIcon icon="menu" :icon-size="2" :text-size="1" />
</div>
这个组件我只需要传递一个 props icon 指定图标的名称即可使用所有 element-plus 图表中的其中一个。
配置 TSX
cnpm i @vitejs/plugin-vue-jsx -D
// vite.config.ts
import vue from "@vitejs/plugin-vue";
import { defineConfig } from "vite";
import vueJsx from "@vitejs/plugin-vue-jsx";
export default defineConfig({
plugins: [
vue(),
vueJsx()
]
});
TSX 创建组件
import { defineComponent, resolveComponent, h } from "vue";
function isText(props: any) {
if (props.text) {
return (
<div class="text mt-1" style={{ fontSize: props.textSize + "rem" }}>
{props.text}
</div>
);
}
}
export default defineComponent({
props: {
icon: {
type: String,
required: true
},
text: {
type: String,
default: ""
},
iconSize: {
type: Number,
default: 1
},
textSize: {
type: Number,
default: 1
}
},
setup(props, ctx) {
// resolveComponent 接收字符串,解析对应的 element-plus 图标组件
const elIcon = resolveComponent(props.icon);
// h 函数渲染 elIcon 组件
return () => (
<div class="i-icon text-center">
<div class="f-c-c">
<el-icon style={{ fontSize: props.iconSize + "rem" }}>{h(elIcon)}</el-icon>
</div>
{isText(props)}
</div>
);
}
});
把图标的组件名称,通过 props 传递给 TextIcon 组件,通过 resolveComponent 解析组件,h 函数渲染该组件。
注意事项
在 TSX 中使用 Element-Plus 组件要全部导入,不能按需自动导入,否则 resolveComponent 不能解析组件:
// main.ts
// import vue
import { createApp } from "vue";
import App from "./App.vue";
// import element-plus
import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
const app = createApp(App);
// all element icons
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component);
}
app.use(ElementPlus);
app.mount("#app");
总结
在 .vue 组件中,模板不能通过一个字符串解析组件,我们可以通过 TSX 来做,利用 resolveComponent 函数接收一个组件的名称(字符串)进行渲染,且该组件是已经全局注册过的。总而言之,TSX 非常灵活,在万不得已的情况下才用,一般 .vue 模板组件已经够用了。
VueTSX 动态使用 element-plus 图标的更多相关文章
- C# 动态绘制任务栏图标的实现
通常我们在做一个应用时会遇到这样的需求:将收到的消息条数显示到任务栏,比如如下的效果 怎么实现呢? 答案是采用WindowsAPICodePack实现,具体参见:Windows 7 任务栏开发 之 覆 ...
- 给element添加自定义图标
element为我们提供了丰富的好用的组件,图标的样式也很多,但还是有一些常用的图标没有在官方图标库里边,比如说微信.淘宝.支付宝等等.那么如何把我们需要的图标添加到进去呢? 因为element有官方 ...
- ajax动态加载的图标
http://www.ajaxload.info/ 这个网站可以动态生成ajax加载样式的小图片,git格式,挺不错推荐给大家
- 动态修改PE文件图标(使用UpdateResource API函数)
PE文件的图标存储在资源文件中,而操作资源要用到的API函数就是UpdateResource首先我们需要先了解一下ICO格式,参考资料:http://www.moon-soft.com/program ...
- 不需要图片,css+svg绘制动态loading加载图标
1.html 部分: <div id="refershDiv" class="refershDiv"> <svg xmlns="ht ...
- Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...
- 转: angularjs 指令中动态编译的方法(适用于有异步请求的情况) 内嵌指令无效
angular的坑很多 例子: 在directive的link中有一个$http请求,当请求完成后根据返回的值动态做element.append('......');这个操作, 能显示没问题,可问题是 ...
- Delphi资源文件(全面分析之位图、光标、图标、AVI、JPEG、Wave)
几乎每个Windows应用程序都使用图标.图片.光标等资源.资源是程序的一部分,但是它是不可执行代码.下面我们就详细介绍资 源文件在Delphi5中建立和使用方法. 1.把资源放到Exe文件的优点 ...
- easyUI tree 自定义图标
文章转载自: https://blog.csdn.net/zhlantian/article/details/52913115 近期由于项目中需要使用easyui tree树形列表,并在系统中动态配置 ...
- vue中渲染页面,动态设置颜色
for循环中动态设置页面的图标或者字体颜色与循环中且套循环 :style="{'color':items.color}" 案例代码: html中 <div class=&qu ...
随机推荐
- 【Oracle】Oracle读取RAW二进制类型并实现与十六进制的相互转换
1.十六进制转二进制 select HEXTORAW('7264B1CD0582734D8E27E0FBDA15B2A5') from dual; 2.二进制转十六进制 select AUUID_0, ...
- 【中间件】Docker
一.Docker (一)基础概念 1.概念 是linux容器的一种封装,它是最流行的Linux容器解决方案,由go语言开发 提供简单易用的容器使用接口,方便创建.使用和销毁 2.应用场景 自动打包.持 ...
- 分支路径图调度框架在 vivo 效果广告业务的落地实践
作者:vivo 互联网AI团队- Liu Zuocheng.Zhou Baojian 本文根据周保建老师在"2022 vivo开发者大会"现场演讲内容整理而成.公众号回复[2022 ...
- des_招标
网站 aHR0cHM6Ly9jdGJwc3AuY29tLyMv 翻到第二页,加载了一个2,并且返回的都是加密的数据 点到initiator,可以看到发送的Axios请求,尝试全局搜索intercep ...
- Redis网络模型究竟有多强
如果面试官问我:Redis为什么这么快? 我肯定会说:因为Redis是内存数据库!如果不是直接把数据放在内存里,甭管怎么优化数据结构.设计怎样的网络I/O模型,都不可能达到如今这般的执行效率. 但是这 ...
- 《HelloGitHub》第 81 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- 分享项目中在用的asp.net下载业务的服务端基类(支持客户端显示下载百分比进度,支持并发数控制,支持限速)
/// <summary> /// 功能简介:asp.net的下载业务的服务端基类(支持客户端显示下载百分比进度,支持并发数控制,支持限速) /// 创建时间:2015-11-20 /// ...
- SICP:符号求导、集合表示和Huffman树(Python实现)
绪论 到目前为止,我们已经使用过的所有复合数据,最终都是从数值出发构造起来的(比如我们在上一篇博客<SICP 2.2: 层次性数据和闭包性质(Python实现)>所介绍的链表和树就基于数来 ...
- Redis-02 Redis 类型
Redis List 命令 说明 例子 LPush 在 List 头插入一个或多个元素 LPush mylist hello RPush 在 List 尾插入一个或多个元素 RPush mylist ...
- 用Java写一个分布式缓存——缓存淘汰算法
前言 之前也用过一些缓存中间件,框架,也想着自己是不是也能用Java写一个出来,于是就有了这个想法,打算在写的过程中同步进行总结. 源码:weloe/Java-Distributed-Cache (g ...