1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > ant-design-vue vue2图标选择器

ant-design-vue vue2图标选择器

时间:2023-09-10 11:43:29

相关推荐

ant-design-vue vue2图标选择器

基于vue2和ant-design-vue封装的一个图标选择器

1.效果图

2.代码

iconPicker.vue

<template><div><a-popover:trigger="trigger"placement="bottomLeft"v-model="visible"><template slot="title"><a-input-searchv-model="searchValue"placeholder="输入英文关键词进行搜索"@change="filterIcon"/></template><template slot="content"><div class="icon-box"><divv-for="(item, index) in iconArr":key="item"@click="handleClick(item)"class="icon-content":style="{ background: icon === item ? '#268961' : ''}"><a-icon :type="item" style="font-size: 18px;"/><!-- <component :is="$antIcons[item]" /> --></div></div></template><slot name="iconSelect"></slot></a-popover></div></template><script>import VueIcon from '@ant-design/icons-vue'let icons = VueIcon.definitions.collectionexport default {name: "IconPicker",props:{icon:{type:String,},//自定义触发方式trigger:{type:String,default: 'click',validator: function(value) {return ['click', 'hover', 'focus'].indexOf(value) !== -1}}},data() {return {visible: false,iconArr: [],searchValue: '',theme: 'outline',iconarr: []}},mounted() {this.iconarr = Object.values(icons).filter(t => t.theme == this.theme).map(i => i.name)this.iconArr = this.iconarr;},methods: {handleClick(icon) {this.$emit('updateIcon',icon)this.visible = false;},filterIcon() {if (this.searchValue){this.iconArr = this.iconarr.filter(item => item.toLowerCase().includes(this.searchValue.toLowerCase()) )}else{this.iconArr = this.iconarr;}}},watch: {visible(val, old) {this.searchValue = ''this.iconArr = this.iconarr;}}<style scoped>.icon-box{overflow: auto;font-size: 20px;width: 250px;height: 230px;display: flex;flex-wrap: wrap;flex-direction: row;align-content: flex-start;justify-content: center;}.icon-content{width: 45px;height: 40px;margin: 5px;cursor: pointer;text-align: center;border-radius: 6px;border: 1px solid #ccc}.icon-content:hover{background: #1890ff;}</style>

使用组件(仅列出关键代码)

<icon-picker @updateIcon="(icon)=>updateIcon(icon, item.prop)"><template slot="iconSelect"><a-input v-decorator="[item.prop, {rules: item.rules}]"/></template></icon-picker>updateIcon(icon, prop){this.form.setFieldsValue({[prop]: icon})this.model && (this.model[prop] = icon)}

参考文章

/a/1190000039986392

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。