vue3+ts封装图标选择组件

news/2024/11/24 9:30:57/

概要

讲解在vue3的项目中封装一个简单好用的图标选择组件。

效果

在这里插入图片描述

第一步,准备图标数据

数据太多,大家去项目中看。项目地址https://gitee.com/nideweixiaonuannuande/xt-admin-vue3
在这里插入图片描述

第二步,页面与样式编写

<template><div><el-iconclass="icon-picker":class="{ empty: myValue === '' }"@click="dialogVisible = true"><svg-icon :name="myValue !== '' ? myValue : 'ep:plus'" /></el-icon><xt-dialog v-model="dialogVisible" width="800px" title="选择图标" :show-cancel="false" :show-confirm="false"><div><el-tabs v-model="activeName" tab-position="left"><el-tab-panev-for="item in data":key="item.prefix":label="item.name":name="item.prefix"><div class="flex flex-wrap"><divclass="border cursor-pointer border-red-300 p-4"title="删除已选图标"@click="removeIcon"><el-icon :size="24"><svg-icon name="ep:delete" /></el-icon></div><divv-for="icon in currentIconList":key="icon"class="border cursor-pointer p-4"@click="chooseIcon(`${activeName}:${icon}`)"><el-icon :size="24"><svg-icon :name="`${activeName}:${icon}`" /></el-icon></div></div></el-tab-pane></el-tabs><div class="flex mt-4 px-10 justify-end"><el-paginationv-model:current-page="pagination.page"layout="prev, pager, next":page-size="pagination.pageSize":total="iconList.length":pager-count="5"background/></div></div></xt-dialog></div>
</template><style lang="scss" scoped>
.icon-picker {width: 40px;height: 40px;line-height: 36px;text-align: center;color: var(--el-text-color-regular);border: 1px solid var(--el-border-color);border-radius: 5px;cursor: pointer;transition: 0.3s;font-size: 24px;vertical-align: middle;&:hover {border: 1px solid var(--el-border-color-darker);}&.empty {color: var(--el-text-color-placeholder);border: 1px dashed var(--el-border-color);&:hover {color: var(--el-text-color-regular);border: 1px solid var(--el-border-color-darker);}}
}
</style>

第三步,逻辑编写

<script setup lang="ts">
import data from './data/data.json'defineOptions({name: 'IconPicker',
})const props = withDefaults(defineProps<{modelValue: string
}>(), {})const emits = defineEmits(['update:modelValue'])const myValue = computed({get() {return props.modelValue},set(value) {emits('update:modelValue', value)},
})// ------------------数据初始化------------------
const activeName = ref(myValue.value.split(':')[0] || data[0].prefix)const pagination = ref({page: 1,pageSize: 49,
})
const iconList = computed(() => {return data.filter(item => item.prefix === activeName.value)[0].icons
})const currentIconList = computed(() => {return iconList.value.slice((pagination.value.page - 1) * pagination.value.pageSize,(pagination.value.page - 1) * pagination.value.pageSize+ pagination.value.pageSize,)
})// ------------------选择图标相关------------------
const dialogVisible = ref(false)function chooseIcon(val: string) {myValue.value = valdialogVisible.value = false
}function removeIcon() {myValue.value = ''dialogVisible.value = false
}
</script>

写在最后

这个组件中涉及到的svg-icon和xt-dialog组件大家可前往https://gitee.com/nideweixiaonuannuande/xt-admin-vue3中查看源代码


http://www.ppmy.cn/news/1196933.html

相关文章

uniapp写一个计算器用于记账(微信小程序,APP)

提要&#xff1a;自己用uniapp写了一个记账小程序&#xff08;目前是小程序&#xff09;&#xff0c;写到计算器部分&#xff0c;在网上找了别人写的计算器&#xff0c;大多数逻辑都是最简单的&#xff0c;都不能满足一个记账计算器的基本逻辑。与其在网上找来找去&#xff0c;…

java网络通信

浏览器中输入&#xff1a;“www.woaijava.com”之后都发生了什么&#xff1f; 请详细阐述 由域名→IP地址 寻找IP地址的过程依次经过了浏览器缓存、系统缓存、hosts文件、路由器缓存、 递归搜索根域名服务器。 建立TCP/IP连接&#xff08;三次握手具体过程&#xff09; 由浏览…

线性表的顺序存储

1.创建&#xff1a;实质是对data与length的修改 //定义一个线性表 typedef struct {int data[MaxSize];//存储线性表的元素 int length;//线性表的长度 }SqList; //新建一个表 void create(SqList &l){//传入地址才可以对其值进行改变 printf("请输入线性表的长度&…

sql父子查询

分析sql过程 启发&#xff1a;https://blog.csdn.net/weixin_43703769/article/details/109254934 预热 分析下面的sql的执行流程 SELECT ids AS _ids,( SELECT ids : GROUP_CONCAT( id ) FROM chat WHERE FIND_IN_SET( pid, ids ) ) AS cids,l : l 1 AS LEVEL FROMchat, …

鸿蒙LiteOs读源码教程+向LiteOS中添加一个简单的基于线程运行时的短作业优先调度策略

一、鸿蒙Liteos读源码教程 鸿蒙的源码是放在openharmony文件夹下&#xff0c;openharmony下的kernel文件夹存放操作系统内核的相关代码和实现。 内核是操作系统的核心部分&#xff0c;所以像负责&#xff1a;资源管理、任务调度、内存管理、设备驱动、进程通信的源码都可以在…

竞赛 深度学习猫狗分类 - python opencv cnn

文章目录 0 前言1 课题背景2 使用CNN进行猫狗分类3 数据集处理4 神经网络的编写5 Tensorflow计算图的构建6 模型的训练和测试7 预测效果8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习猫狗分类 ** 该项目较为新颖&a…

数字处理-第10届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第3讲。 数字处理&#xff…

线性代数 第六章 二次型

一、矩阵表示 称为二次型的秩。只含有变量的平方项&#xff0c;所有混合项系数全是零&#xff0c;称为标准形&#xff1b;平方项的系数为1、-1或0&#xff0c;称为规范形。 二次型的标准形不唯一&#xff0c;可以用不用的坐标变换化二次型为标准形&#xff1b;二次型的规范形唯…