Textarea 多行文本框

文本输入区域。

何时使用

需要手动输入文字,并且文字内容较多时使用。

基本用法

:::demo

<template>
  <div class="mb-0">Default</div>
  <d-textarea class="mb-2" v-model="valueDefault" autofocus id="textArea"></d-textarea>

  <div class="mb-0">Disabled</div>
  <d-textarea class="mb-2" placeholder="我是被禁用状态" disabled></d-textarea>

  <div class="mb-0">Error</div>
  <d-textarea v-model="valueError" placeholder="我是出错状态" error></d-textarea>
</template>

<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const valueDefault = ref('我是默认值');
    const valueError = ref('');
    return {
      valueDefault,
      valueError,
    };
  },
});
</script>

:::

文本框高度控制

:::demo

<template>
  <d-textarea v-model="valueHeight" :rows="5" placeholder="文本域高度可通过 rows 属性控制"></d-textarea>
</template>

<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const valueHeight = ref('');
    return {
      valueHeight,
    };
  },
});
</script>

:::

自适应文本框

设置文字输入类型的 autosize 属性使得根据内容自动调整的高度。 你可以给 autosize 提供一个包含有最大和最小高度的对象,让输入框自动调整。

:::demo

<template>
  <d-textarea class="mb-2" v-model="valueAutoSize1" autosize placeholder="请输入"></d-textarea>
  <d-textarea v-model="valueAutoSize2" :autosize="{ minRows: 2, maxRows: 4 }" placeholder="请输入" resize="both"></d-textarea>
</template>

<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const valueAutoSize1 = ref('');
    const valueAutoSize2 = ref('');
    return {
      valueAutoSize1,
      valueAutoSize2,
    };
  },
});
</script>

:::

调整大小

:::demo

<template>
  <div class="mb-0">vertical</div>
  <d-textarea class="mb-2" placeholder="我可以缩放" resize="vertical"></d-textarea>

  <div class="mb-0">horizontal</div>
  <d-textarea class="mb-2" resize="horizontal" placeholder="请输入"></d-textarea>

  <div class="mb-0">both</div>
  <d-textarea class="mb-2" resize="both" placeholder="请输入"></d-textarea>

  <div class="mb-0">none</div>
  <d-textarea class="mb-2" resize="none" placeholder="请输入"></d-textarea>

  <div class="mb-0">inherit</div>
  <d-textarea class="mb-2" resize="inherit" placeholder="请输入"></d-textarea>
</template>

:::

显示字数

:::demo

<template>
  <div class="mb-0">默认</div>
  <d-textarea class="mb-2" v-model="valueCount1" show-count placeholder="请输入"></d-textarea>
  <div class="mb-0">显示最大字数</div>
  <d-textarea v-model="valueCount2" show-count maxlength="20" placeholder="请输入"></d-textarea>
</template>

<script>
import { defineComponent, ref } from 'vue';

export default defineComponent({
  setup() {
    const valueCount1 = ref('');
    const valueCount2 = ref('');
    return {
      valueCount1,
      valueCount2,
    };
  },
});
</script>

:::

事件响应

:::demo

<template>
  <d-textarea
    v-model="value1"
    show-count
    :max-length="20"
    placeholder="打开控制台输入文字看看"
    @update:modelValue="onUpdate"
    @change="onChange"
    @focus="onFocus"
    @keydown="onKeydown"
  ></d-textarea>
</template>

<script>
import { ref } from 'vue';
export default {
  setup() {
    const onUpdate = (value) => {
      console.log('【d-textarea update value】:', value);
    };
    const onChange = (value) => {
      console.log('【d-textarea change value】:', value);
    };
    const onFocus = (e) => {
      console.log('【d-textarea onFocus】:', e);
    };
    const onKeydown = (e) => {
      console.log('【d-textarea onKeydown:', e);
    };
    const value1 = ref('');
    return {
      onUpdate,
      onChange,
      onFocus,
      onKeydown,
      value1,
    };
  },
};
</script>

:::

Textarea 参数

参数名 类型 默认值 说明 跳转 Demo
v-model string - 可选,文本框绑定值 基本用法
placeholder string - 可选,文本框 placeholder 基本用法
disabled boolean false 可选,文本框是否被禁用 基本用法
autofocus boolean false 可选,文本框是否自动获得焦点 基本用法
error boolean false 可选,文本框是否出现输入错误 基本用法
resize Resize 'none' 可选,文本框是否可调整大小 调整大小
show-count boolean false 可选,文本框是否是否展示字数 显示字数
rows number / string 2 可选,文本框高度控制 文本框高度控制
autosize boolean / object false textarea 高度是否自适应。可以接受一个对象,比如: { minRows: 2, maxRows: 6 } 自适应文本框
show-glow-style boolean true 可选,是否展示悬浮发光效果

Textarea 事件

事件名 回调参数 说明 跳转 Demo
update Function(value: string) 文本框内容变化(实时触发) 事件响应
focus Function(event: Event) 文本框获得焦点 事件响应
blur Function(event: Event) 文本框失去焦点 事件响应
change Function(value: string) 文本框内容变化(失去焦点触发) 事件响应
keydown Function(event: Event) 文本框按下键盘 事件响应

Textarea 类型定义

Resize

type Resize = 'none' | 'vertical' | 'horizontal' | 'both' | 'inherit';