Skip to content

Textarea ​

多行文本输入。基于原生 <textarea>,对标 HInput label / error / size 体系。

基础 ​

当前值:(空)

vue
<script setup lang="ts">
import { ref } from 'vue'
import { HTextarea } from 'happier-ui'

const value = ref('')
</script>

<template>
  <h-textarea v-model="value" label="备注" placeholder="输入多行文本..." />
</template>

尺寸 ​

vue
<h-textarea v-model="value" size="sm" label="sm" :rows="2" />
<h-textarea v-model="value" size="md" label="md" :rows="3" />
<h-textarea v-model="value" size="lg" label="lg" :rows="4" />

自动撑高 ​

vue
<h-textarea v-model="value" label="自动撑高" placeholder="输入文字..." resize="auto" />

字数统计 ​

0 / 50
vue
<h-textarea v-model="value" label="限 50 字" :max-length="50" show-count placeholder="最多 50 字..." />

错误态 ​

vue
<h-textarea v-model="value" label="反馈" error="内容不得为空" />

禁用 ​

vue
<h-textarea model-value="禁用的内容" label="禁用" disabled />

API ​

Props ​

名称类型默认说明
modelValuestring''当前值(v-model)
labelstring—标签(同 HInput)
descriptionstring—描述文字
errorstring—错误消息
invalidboolean—显式无效态
placeholderstring—占位提示
rowsnumber3初始行数
disabledbooleanfalse禁用
readonlybooleanfalse只读
spellcheckbooleantrue拼写检查
resize'none' | 'vertical' | 'both' | 'auto''vertical'缩放控制;auto 为根据内容自动撑高
maxLengthnumber—最大字符数
showCountbooleanfalse显示字数统计
size'sm' | 'md' | 'lg''md'尺寸(对齐 HInput)
monobooleanfalse内部 <textarea> 使用等宽字体(var(--h-font-mono)),适合代码 / JSON / curl 输入
namestring—原生 name

Emits ​

事件载荷说明
update:modelValuestring输入值改变
focusFocusEvent聚焦
blurFocusEvent失焦

行为说明 ​

  • resize="auto" 时 textarea 高度随内容自动撑高,同时隐藏浏览器原生缩放手柄。
  • showCount 在 textarea 右下角显示当前字数;配合 maxLength 时显示 n / max,超限时高亮警示。
  • iOS 上 font-size 最小 16px,防止页面缩放。

无障碍 ​

  • 原生 <textarea> 内建可编辑文本区域语义与键盘操作。
  • label prop 通过 <label :for="textareaId"> 关联 textarea 元素。
  • aria-invalid / aria-describedby 同步 error/description 状态。
  • disabled 态使用原生 disabled 属性。

MIT License