#Textarea 文本域
显示表单文本域或看起来像文本域的组件。
#组件特性
- 📏 多种尺寸:支持
xs、sm、md、lg、xl、2xl、default尺寸规格。 - 📐 自动高度:支持
autoSize属性根据内容自动调整高度。 - ❌ 清除按钮:支持
clearable属性显示清除按钮。 - ⚠️ 错误状态:支持
error属性显示错误状态。 - 📝 字符计数:支持
showCount和maxlength属性显示字符计数。 - 🔄 调整大小:支持
resize属性控制调整大小的行为(none/vertical/horizontal/both)。 - 📝 只读/禁用:支持
readonly和disabled属性。 - 🎨 主题定制:基于
BrConfigProvider支持全局主题配置和 TailwindCSS 局部覆盖。
#基础用法
<script setup>
import { ref } from 'vue'
const text = ref('')
</script>
<template>
<div class="space-y-2">
<BrTextarea v-model="text" placeholder="Type your message here." />
<p class="text-xs text-muted-foreground">Value: {{ text }}</p>
</div>
</template>#自动高度
根据内容自动调整高度。
<script setup>
import { ref } from 'vue'
const message = ref('')
</script>
<template>
<div class="space-y-2">
<BrTextarea
v-model="message"
placeholder="Type many lines to see auto resize..."
auto-size
/>
</div>
</template>#禁用状态
<template>
<div class="space-y-2">
<BrTextarea disabled placeholder="Disabled Textarea" />
</div>
</template>#带标签
<template>
<div class="grid w-full gap-1.5">
<BrLabel for="message-2">Your Message</BrLabel>
<BrTextarea id="message-2" placeholder="Type your message here." />
<p class="text-sm text-muted-foreground">
Your message will be copied to the support team.
</p>
</div>
</template>#带字符计数
<script setup>
import { ref } from 'vue'
const bio = ref('I am a software engineer based in San Francisco. I love building things for the web.')
</script>
<template>
<div class="space-y-2">
<BrLabel for="bio">Bio</BrLabel>
<BrTextarea
id="bio"
v-model="bio"
placeholder="Tell us about yourself."
:maxlength="100"
show-count
/>
</div>
</template>#可清除
<template>
<div class="space-y-2">
<BrTextarea placeholder="Type to see clear button" clearable />
</div>
</template>#错误状态
<template>
<div class="grid w-full gap-1.5">
<BrLabel for="message-error">Error State</BrLabel>
<BrTextarea id="message-error" placeholder="Type here..." error />
<p class="text-sm text-destructive">
Please enter a valid message.
</p>
</div>
</template>#尺寸
<script setup>
import { BrTextarea, BrLabel } from '@breezeui/vue'
</script>
<template>
<div class="grid w-full gap-4">
<div class="grid w-full gap-1.5">
<BrLabel>Extra Small (xs)</BrLabel>
<BrTextarea placeholder="Type your message here." size="xs" />
</div>
<div class="grid w-full gap-1.5">
<BrLabel>Small (sm)</BrLabel>
<BrTextarea placeholder="Type your message here." size="sm" />
</div>
<div class="grid w-full gap-1.5">
<BrLabel>Default</BrLabel>
<BrTextarea placeholder="Type your message here." />
</div>
<div class="grid w-full gap-1.5">
<BrLabel>Medium (md)</BrLabel>
<BrTextarea placeholder="Type your message here." size="md" />
</div>
<div class="grid w-full gap-1.5">
<BrLabel>Large (lg)</BrLabel>
<BrTextarea placeholder="Type your message here." size="lg" />
</div>
<div class="grid w-full gap-1.5">
<BrLabel>Extra Large (xl)</BrLabel>
<BrTextarea placeholder="Type your message here." size="xl" />
</div>
<div class="grid w-full gap-1.5">
<BrLabel>2X Large (2xl)</BrLabel>
<BrTextarea placeholder="Type your message here." size="2xl" />
</div>
</div>
</template>#调整大小行为
你可以使用 resize 属性控制调整大小的行为。
<template>
<div class="grid w-full gap-4">
<div class="grid w-full gap-1.5">
<BrLabel>No Resize (none)</BrLabel>
<BrTextarea placeholder="Cannot resize" resize="none" />
</div>
<div class="grid w-full gap-1.5">
<BrLabel>Vertical (Default)</BrLabel>
<BrTextarea placeholder="Resize vertically" resize="vertical" />
</div>
<div class="grid w-full gap-1.5">
<BrLabel>Horizontal</BrLabel>
<BrTextarea placeholder="Resize horizontally" resize="horizontal" />
</div>
</div>
</template>#主题定制
你可以使用 Tailwind CSS 类自定义文本域的外观,或者通过覆盖全局 CSS 变量。
#全局主题配置
BrTextarea 组件遵循 BrConfigProvider 提供的主题配置。
<template>
<BrConfigProvider :theme="theme">
<BrTextarea placeholder="Themed Textarea" />
</BrConfigProvider>
</template>#Tailwind 定制
你也可以使用 class 属性添加自定义样式:
<BrTextarea class="border-purple-500 focus-visible:ring-purple-500 min-h-[150px]" />#API
#Props
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| modelValue | string | number | - | 文本域的值。 |
| defaultValue | string | number | - | 文本域的默认值。 |
| disabled | boolean | false | 是否禁用文本域。 |
| readonly | boolean | false | 是否只读。 |
| placeholder | string | - | 占位文本。 |
| size | default | xs | sm | md | lg | xl | 2xl | default | 文本域尺寸。 |
| error | boolean | false | 是否显示错误状态。 |
| clearable | boolean | false | 是否显示清除按钮。 |
| autoSize | boolean | object | false | 是否自动调整高度。 |
| rows | number | string | 3 | 可见行数。 |
| maxlength | number | string | - | 允许的最大字符数。 |
| showCount | boolean | false | 是否显示字符计数(需要 maxlength)。 |
| resize | none | vertical | horizontal | both | vertical | 调整大小的行为。 |
#Events
| 名称 | 参数 | 说明 |
|---|---|---|
| update:modelValue | string | number | 当文本域值变化时触发。 |
| clear | - | 当点击清除按钮时触发。 |
| input | Event | 当文本域值变化时触发。 |
| change | Event | 当文本域值变化时触发(blur)。 |
| focus | Event | 当文本域获得焦点时触发。 |
| blur | Event | 当文本域失去焦点时触发。 |