Skip to content

Submit Button

新粗野主义风格提交按钮,内置加载和等待状态,专为表单提交设计。

预览

安装

pnpm dlx brutx@latest add submit-button

用法

vue
<script setup>
import { ref } from 'vue'
import SubmitButton from '@/components/ui/SubmitButton.vue'

const isLoading = ref(false)

async function handleSubmit() {
    isLoading.value = true
    await new Promise(resolve => setTimeout(resolve, 2000))
    isLoading.value = false
}
</script>

<template>
    <form @submit.prevent="handleSubmit">
        <SubmitButton :loading="isLoading" variant="primary">
            Save Changes
        </SubmitButton>
    </form>
</template>

配合表单使用

vue
<script setup>
import { ref } from 'vue'
import Form from '@/components/ui/Form.vue'
import SubmitButton from '@/components/ui/SubmitButton.vue'

const isLoading = ref(false)

function onSubmit(values) {
    isLoading.value = true
    setTimeout(() => {
        isLoading.value = false
    }, 2000)
}
</script>

<template>
    <Form @submit="onSubmit">
        <SubmitButton :loading="isLoading" variant="primary">
            Sign In
        </SubmitButton>
    </Form>
</template>

等待文本

加载时,按钮会显示 pendingText 属性的值,而非插槽内容:

vue
<script setup>
import SubmitButton from '@/components/ui/SubmitButton.vue'
</script>

<template>
    <SubmitButton loading pending-text="Processing..." variant="primary">
        Pay Now
    </SubmitButton>
</template>

属性

属性类型默认值
variant'default' | 'primary' | 'secondary' | 'accent' | 'danger' | 'success' | 'outline' | 'ghost' | 'link''default'
size'sm' | 'default' | 'lg' | 'xl' | 'icon''default'
pendingTextstring'Submitting...'
loadingbooleanfalse
disabledbooleanfalse
classstring

行为

  • 按钮渲染为 <button type="submit"> 用于表单提交
  • loadingtrue 时,按钮被禁用并显示旋转图标
  • loadingtrue 时,插槽内容被替换为 pendingText
  • disabled 属性或 loading 状态都会阻止点击