vue3 ts bootstrap 按钮组件

969 阅读1分钟
<template>
  <button @click="click" :type="buttonType" :disabled="disabled" class="btn" :class="[
    isOutline ? `btn-outline-${classType}` : `btn-${classType}`, 
    isBlock ? `btn-block` : '', 
    size ? `btn-${size}` : '', 
    isActive ? 'active' : ''
  ]">
    <span v-if="$slots.default"><slot></slot></span>
  </button>
</template>

<script lang="ts" setup>
import { toRefs } from 'vue'
type ButtonType = 'button' | 'submit' | 'reset'
type ClassType = 'default' | 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark' | 'link'
type ButtonSize = 'lg' | 'sm'
interface ButtonPtops {
  classType?: ClassType
  isOutline?: boolean
  size?: ButtonSize
  isBlock?: boolean
  isActive?: boolean
  disabled?: boolean
  buttonType?: ButtonType
}

interface ButtonEvent {
  (e: 'click', item: Event): void
}

const props = defineProps<ButtonPtops>()
const { classType, isOutline, size, isBlock, isActive, disabled, buttonType } = toRefs(props)


const emits = defineEmits<ButtonEvent>()
const click = (e: Event) => {
  emits('click', e)
}
</script>

<style scoped>

</style>