ant-design-vue/components/icon/icon.vue

48 lines
910 B
Vue
Raw Normal View History

2017-10-26 15:18:08 +08:00
<template>
2018-01-24 22:53:45 +08:00
<i :title="title" :class="classes" @click="handleClick"></i>
2017-10-26 15:18:08 +08:00
</template>
<script>
export default {
name: 'Icon',
props: {
prefixCls: {
default: 'anticon',
type: String,
},
type: String,
title: String,
spin: Boolean,
},
data () {
return {
}
},
computed: {
classes () {
const { prefixCls, type, spin } = this
return {
[`${prefixCls}`]: true,
[`${prefixCls}-${type}`]: type,
[`${prefixCls}-spin`]: !!spin || type === 'loading',
}
},
},
methods: {
handleClick (event) {
if (this.clicked) {
return
}
this.clicked = true
clearTimeout(this.timeout)
this.timeout = setTimeout(() => (this.clicked = false), 500)
this.$emit('click', event)
},
},
beforeDestroy () {
if (this.timeout) {
clearTimeout(this.timeout)
}
},
}
</script>