Source: http://www.ruoyi.vip/ import Vue from 'vue' import SvgIcon from '@/components/SvgIcon' // svg component // register globally Vue.component('svg-icon', SvgIcon) const req = require.context('./svg', false, /\.svg$/) const requireAll = requireContext => requireContext.keys().map(requireContext) requireAll(req) # replace default config # multipass: true # full: true plugins: # - name # # or: # - name: false # - name: true # # or: # - name: # param1: 1 # param2: 2 -removeAttrs: attrs: - 'fill' - 'fill-rule' <template> <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" /> <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners"> <use :xlink:href="iconName" rel="external nofollow" /> </svg> </template> <script> // doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage import { isExternal } from '@/utils/validate' export default { name: 'SvgIcon', props: { iconClass: { type: String, required: true }, className: { type: String, default: '' } }, computed: { isExternal() { return isExternal(this.iconClass) }, iconName() { return `#icon-${this.iconClass}` }, svgClass() { if (this.className) { return 'svg-icon ' + this.className } else { return 'svg-icon' } }, styleExternalIcon() { return { mask: `url(${this.iconClass}) no-repeat 50% 50%`, '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%` } } } } </script> <style scoped> .svg-icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; } .svg-external-icon { background-color: currentColor; mask-size: cover!important; display: inline-block; } </style> <!-- @author zhengjie --> <template> <div class="icon-body"> <el-input v-model="name" style="position: relative;" clearable placeholder="Please enter the icon name" @clear="filterIcons" @input.native="filterIcons"> <i slot="suffix" class="el-icon-search el-input__icon" /> </el-input> <div class="icon-list"> <div v-for="(item, index) in iconList" :key="index" @click="selectedIcon(item)"> <svg-icon :icon-class="item" style="height: 30px;width: 16px;" /> <span>{{ item }}</span> </div> </div> </div> </template> <script> import icons from './requireIcons' export default { name: 'IconSelect', data() { return { name: '', iconList: icons } }, methods: { filterIcons() { this.iconList = icons if (this.name) { this.iconList = this.iconList.filter(item => item.includes(this.name)) } }, selectedIcon(name) { this.$emit('selected', name) document.body.click() }, reset() { this.name = '' this.iconList = icons } } } </script> <style rel="stylesheet/scss" lang="scss" scoped> .icon-body { width: 100%; padding: 10px; .icon-list { height: 200px; overflow-y: scroll; div { height: 30px; line-height: 30px; margin-bottom: -5px; cursor: pointer; width: 33%; float: left; } span { display: inline-block; vertical-align: -0.15em; fill: currentColor; overflow: hidden; } } } </style> This is the end of this article about vue icon selector. For more relevant vue selector content, please search 123WORDPRESS.COM's previous articles or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future! You may also be interested in:
|
>>: MySQL Full-text Indexing Guide
1. First, you need to use the target selector of ...
This article mainly introduces the case of Vue en...
Table of contents history pushState() Method push...
Front-end technology layer (The picture is a bit e...
In the hive installation directory, enter the con...
CSS Clear Default Styles The usual clear default ...
We usually have a scanning box when we open the c...
1. Uninstalling MySQL 5.7 1.1查看yum是否安裝過mysql cd y...
1. Purpose Write a Flask application locally, pac...
Creating a Vue 3.x Project npm init @vitejs/app m...
The attributes of the <TD> tag are used to ...
Problem phenomenon: [root@localhost ~]# docker im...
1. Accessing literals and local variables is the ...
This article example shares the specific code for...
Overview Today we will mainly share how to config...