表单

Textarea 多行输入

用于多行输入场景的 MoriUI 组件。

资源

导入

import { Textarea } from 'moriui'

基础输入

Textarea 渲染原生 textarea,并通过字符串 v-model 同步多行内容。

字段组合

使用 FieldLabel、FieldDescription 与 FieldError 提供名称、帮助和校验反馈。

禁用与无效

disabled 保留原生禁用语义;aria-invalid 与外围 Field 的 data-invalid 同步错误状态。

RTL

textarea 的文字、占位符和光标方向可继承或显式设置 dir。

示例

概览

通过 v-model 编辑多行消息。

<script setup lang="ts">
  import { shallowRef } from 'vue'
  import { Textarea } from 'moriui'

  const message = shallowRef('')
</script>

<template>
  <Textarea v-model="message" aria-label="消息" placeholder="在这里输入消息…" />
</template>

字段

Field 组合标签、说明与多行输入。

在下方输入需要发送的内容。

<script setup lang="ts">
  import { shallowRef } from 'vue'
  import { Field, FieldDescription, FieldLabel, Textarea } from 'moriui'

  const message = shallowRef('')
</script>

<template>
  <Field class="w-full max-w-xs">
    <FieldLabel for="textarea-message">
      消息
    </FieldLabel>
    <FieldDescription>在下方输入需要发送的内容。</FieldDescription>
    <Textarea id="textarea-message" v-model="message" placeholder="在这里输入消息…" />
  </Field>
</template>

禁用

disabled 阻止编辑并保留当前内容。

<script setup lang="ts">
  import { shallowRef } from 'vue'
  import { Field, FieldLabel, Textarea } from 'moriui'

  const message = shallowRef('这条消息已锁定。')
</script>

<template>
  <Field class="w-full max-w-xs" data-disabled>
    <FieldLabel for="textarea-disabled">
      消息
    </FieldLabel>
    <Textarea id="textarea-disabled" v-model="message" disabled />
  </Field>
</template>

无效

aria-invalid 与 FieldError 提供完整错误反馈。

<script setup lang="ts">
  import { shallowRef } from 'vue'
  import { Field, FieldError, FieldLabel, Textarea } from 'moriui'

  const message = shallowRef('')
</script>

<template>
  <Field class="w-full max-w-xs" data-invalid>
    <FieldLabel for="textarea-invalid">
      消息
    </FieldLabel>
    <Textarea
      id="textarea-invalid"
      v-model="message"
      aria-invalid="true"
      placeholder="在这里输入消息…"
    />
    <FieldError>请输入有效的消息。</FieldError>
  </Field>
</template>

操作按钮

多行输入与发送按钮组成消息编辑区。

<script setup lang="ts">
  import { shallowRef } from 'vue'
  import { Button, Textarea } from 'moriui'

  const message = shallowRef('')

  function sendMessage() {
    message.value = ''
  }
</script>

<template>
  <div class="grid w-full max-w-xs gap-2">
    <Textarea v-model="message" aria-label="消息" placeholder="在这里输入消息…" />
    <Button type="button" :disabled="!message.trim()" @click="sendMessage">
      发送消息
    </Button>
  </div>
</template>

RTL

阿拉伯语反馈输入使用 RTL 文本方向。

شاركنا أفكارك حول خدمتنا.

<script setup lang="ts">
  import { shallowRef } from 'vue'
  import { Field, FieldDescription, FieldLabel, Textarea } from 'moriui'

  const feedback = shallowRef('')
</script>

<template>
  <Field class="w-full max-w-xs" dir="rtl">
    <FieldLabel for="feedback-rtl">
      التعليقات
    </FieldLabel>
    <Textarea
      id="feedback-rtl"
      v-model="feedback"
      dir="rtl"
      placeholder="تعليقاتك تساعدنا على التحسين…"
      rows="4"
    />
    <FieldDescription>شاركنا أفكارك حول خدمتنا.</FieldDescription>
  </Field>
</template>

API

属性 类型 默认值 说明
Textarea v-modelstring''当前多行文本值。
Textarea defaultValuestringundefined未提供 v-model 时的初始值。
原生 textarea 属性TextareaHTMLAttributesrows、disabled、required、placeholder、maxlength、aria-invalid 等自动透传。
classHTMLAttributes["class"]undefined合并到 Textarea 的 Nova 基础样式。

无障碍说明

Textarea 输出原生 textarea,必须使用 FieldLabel/Label 或 aria-label 提供名称。错误使用 aria-invalid 和 FieldError,必填使用 required;不要用 placeholder 替代持久可见的标签。

关联组件