Ant Design of Vue图标选择器

看了一下antDesign并没有图标选择的组件,在网上查找了一下资料发现这篇文章已经实现了下拉选择图标的需求;

antd vue图标选择器icon-default.png?t=M666https://blog.csdn.net/a2925447584/article/details/116702831

但是实底图标,线性图标,双色图标全部混在了一起,功能虽然已经实现了,但后期用户查找起来比较麻烦,于是打算自己手动写一个图标选择器,实现效果如下:

可对图标风格进行切换 

 

一、全局图标

main.js中引入全部图标

import { createApp } from 'vue';
import App from './App.vue';
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/antd.css';
import * as antIcons from "@ant-design/icons-vue";
import RouterIndex from './router/index';
import axios from 'axios';
import VueAxios from 'vue-axios';

const app = createApp(App).use(Antd);
app.use(RouterIndex);

// 注册组件
Object.keys(antIcons).forEach(key => {
    app.component(key, antIcons[key])
})
// 添加到全局
app.config.globalProperties.$antIcons = antIcons

app.mount("#app");

二、图标选择器组件

iconPicker组件

<template>
	<a-radio-group v-model:value="value1" button-style="solid">
		<a-radio-button value="1">线框风格</a-radio-button>
		<a-radio-button value="2">实底风格</a-radio-button>
		<a-radio-button value="3">双色风格</a-radio-button>
	</a-radio-group>

	<div style="margin-top: 15px;">
		<span v-for="(item,i) in iconList" class="icons-list">
			<span v-if="value1==1">
				<component class="icon" @click="sendMsg(iconList[i])" v-if="iconList[i].indexOf('Outlined')>0" :is="$antIcons[iconList[i]]" />
			</span>
			<span v-if="value1==2">
				<component class="icon" @click="sendMsg(iconList[i])" v-if="iconList[i].indexOf('Filled')>0" :is="$antIcons[iconList[i]]" />
			</span>
			<span v-if="value1==3">
				<component class="icon" @click="sendMsg(iconList[i])" v-if="iconList[i].indexOf('TwoTone')>0" :is="$antIcons[iconList[i]]" />
			</span>
		</span>
	</div>


</template>
<script>
	import {
		defineComponent
	} from 'vue';
	import {
		HomeOutlined,
		SettingFilled,
		SmileOutlined,
		SyncOutlined,
		LoadingOutlined,
	} from '@ant-design/icons-vue';
	import iconList from '../iconPicker/icons.json'

	export default defineComponent({
		components: {
			HomeOutlined,
			SettingFilled,
			SmileOutlined,
			SyncOutlined,
			LoadingOutlined,
		},
		data() {
			return {
				iconList: iconList,
				value1: "1",
			}
		},
		methods:{
			sendMsg:function(iconText) {
				//func: 是父组件指定的传数据绑定的函数,this.msg:子组件给父组件传递的数据
				this.$emit('func', iconText)
			}
		},
		created() {

		}

	});
</script>
<style scoped>
	.icons-list :deep(.anticon) {
		margin-right: 6px;
		font-size: 24px;
	}

	.icon:hover {
		background-color: #1890ff;
		color: white;
	}
</style>

需引入的icons.json文件

[
  "AccountBookFilled",
  "AccountBookOutlined",
  "AccountBookTwoTone",
  "AimOutlined",
  "AlertFilled",
  "AlertOutlined",
  "AlertTwoTone",
  "AlibabaOutlined",
  "AlignCenterOutlined",
  "AlignLeftOutlined",
  "AlignRightOutlined",
  "AlipayCircleFilled",
  "AlipayCircleOutlined",
  "AlipayOutlined",
  "AlipaySquareFilled",
  "AliwangwangFilled",
  "AliwangwangOutlined",
  "AliyunOutlined",
  "AmazonCircleFilled",
  "AmazonOutlined",
  "AmazonSquareFilled",
  "AndroidFilled",
  "AndroidOutlined",
  "AntCloudOutlined",
  "AntDesignOutlined",
  "ApartmentOutlined",
  "ApiFilled",
  "ApiOutlined",
  "ApiTwoTone",
  "AppleFilled",
  "AppleOutlined",
  "AppstoreAddOutlined",
  "AppstoreFilled",
  "AppstoreOutlined",
  "AppstoreTwoTone",
  "AreaChartOutlined",
  "ArrowDownOutlined",
  "ArrowLeftOutlined",
  "ArrowRightOutlined",
  "ArrowUpOutlined",
  "ArrowsAltOutlined",
  "AudioFilled",
  "AudioMutedOutlined",
  "AudioOutlined",
  "AudioTwoTone",
  "AuditOutlined",
  "BackwardFilled",
  "BackwardOutlined",
  "BankFilled",
  "BankOutlined",
  "BankTwoTone",
  "BarChartOutlined",
  "BarcodeOutlined",
  "BarsO
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值