Example code of vue icon selector

Example code of vue icon selector

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:
  • Detailed explanation of how to use the Vue date time picker component
  • How to implement variable expression selector in Vue
  • A brief discussion on the pitfalls of Vue using Cascader cascade selector data echo
  • Vue implements multi-label selector
  • Vue sample code for implementing time selector with Vant
  • mpvue WeChat applet multi-column selector usage to achieve province and city selection

<<:  Understand the rendering process of HTML pages in preparation for learning front-end performance optimization (continued)

>>:  MySQL Full-text Indexing Guide

Recommend

Example of CSS3 to achieve div sliding in and out from bottom to top

1. First, you need to use the target selector of ...

Detailed explanation of JavaScript to monitor route changes

Table of contents history pushState() Method push...

CSS and HTML and front-end technology layer diagram

Front-end technology layer (The picture is a bit e...

The whole process of configuring hive metadata to MySQL

In the hive installation directory, enter the con...

How to clear default styles and set common styles in CSS

CSS Clear Default Styles The usual clear default ...

Example code for implementing a QR code scanning box with CSS

We usually have a scanning box when we open the c...

CentOS7.x uninstall and install MySQL5.7 operation process and encoding format modification method

1. Uninstalling MySQL 5.7 1.1查看yum是否安裝過mysql cd y...

Docker deployment of Flask application implementation steps

1. Purpose Write a Flask application locally, pac...

Implementation of Vue 3.x project based on Vite2.x

Creating a Vue 3.x Project npm init @vitejs/app m...

HTML table tag tutorial (26): cell tag

The attributes of the <TD> tag are used to ...

Solve the problem of docker's tls (ssl) certificate expiration

Problem phenomenon: [root@localhost ~]# docker im...

Detailed example of reading speed of js objects

1. Accessing literals and local variables is the ...

JavaScript canvas to achieve raindrop effect

This article example shares the specific code for...

Detailed explanation of how to configure Nginx web server sample code

Overview Today we will mainly share how to config...