文本框(Form textarea)

创建多行文本输入,并支持自动调整高度,最小和最大行数以及上下文状态。


<template>
  <div>
    <b-form-textarea
      id="textarea"
      v-model="text"
      placeholder="Enter something..."
      rows="3"
      max-rows="6"
    ></b-form-textarea>

    <pre class="mt-3 mb-0">{{ text }}</pre>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        text: ''
      }
    }
  }
</script>

控制尺寸

使用 size 属性将文本高度分别设置为 smlg(分别用于小号或大号)。

要控制宽度,请将输入放置在标准 Bootstrap 网格列内。

<b-container fluid>
  <b-row>
    <b-col sm="2">
      <label for="textarea-small">Small:</label>
    </b-col>
    <b-col sm="10">
      <b-form-textarea
        id="textarea-small"
        size="sm"
        placeholder="Small textarea"
      ></b-form-textarea>
    </b-col>
  </b-row>

  <b-row class="mt-2">
    <b-col sm="2">
      <label for="textarea-default">Default:</label>
    </b-col>
    <b-col sm="10">
      <b-form-textarea
        id="textarea-default"
        placeholder="Default textarea"
      ></b-form-textarea>
    </b-col>
  </b-row>

  <b-row class="mt-2">
    <b-col sm="2">
      <label for="textarea-large">Large:</label>
    </b-col>
    <b-col sm="10">
      <b-form-textarea
        id="textarea-large"
        size="lg"
        placeholder="Large textarea"
      ></b-form-textarea>
    </b-col>
  </b-row>
</b-container>

显示行

要设置 <b-form-textarea> 的高度,请将 rows 属性设置为所需的行数。如果没有为 rows 提供任何值,则它将默认为 2(浏览器默认值和最小可接受值)。将其设置为 null 或小于 2 的值将导致使用默认值 2

<div>
  <b-form-textarea
    id="textarea-rows"
    placeholder="Tall textarea"
    rows="8"
  ></b-form-textarea>
</div>

禁用调整大小句柄

一些网络浏览器将允许用户重新调整文本区域的高度。要禁用此功能,请将 no-resize 属性设置为 true

<div>
  <b-form-textarea
    id="textarea-no-resize"
    placeholder="Fixed height textarea"
    rows="3"
    no-resize
  ></b-form-textarea>
</div>

自动高度

<b-form-textarea> 也可以自动调整其高度(文本行)以适合内容,即使用户输入或删除文本也是如此。文本区域的高度将增大或缩小以适合内容(增大到 max-rows【最大行数】或缩小到最小 rows【行数】)。

若要设置初始最小高度(以行为单位),请将 rows 属性设置为所需的行数(或将其保留为默认值 2 ),然后设置文本区域将增长到的最大行数(显示滚动条之前) 通过将 max-rows 属性设置为文本的最大行数。

要使高度保持 sticky【粘性】(即永不收缩),请将 no-auto-shrink 属性设置为 true 。 如果未设置 max-rows 或等于或小于 rows【行】,则 no-auto-shrink 属性无效。

请注意,在自动高度模式下,将自动禁用文本区域的大小调整句柄(如果浏览器支持)。

<b-container fluid>
  <b-row>
    <b-col sm="2">
      <label for="textarea-auto-height">Auto height:</label>
    </b-col>
    <b-col sm="10">
      <b-form-textarea
        id="textarea-auto-height"
        placeholder="Auto height textarea"
        rows="3"
        max-rows="8"
      ></b-form-textarea>
    </b-col>
  </b-row>

  <b-row class="mt-2">
    <b-col sm="2">
      <label for="textarea-no-auto-shrink">No auto-shrink:</label>
    </b-col>
    <b-col sm="10">
      <b-form-textarea
        id="textarea-no-auto-shrink"
        placeholder="Auto height (no-shrink) textarea"
        rows="3"
        max-rows="8"
        no-auto-shrink
      ></b-form-textarea>
    </b-col>
  </b-row>
</b-container>

自动高度执行注意事项

自动高度通过 CSS 查询计算得出的高度来工作,因此输入必须在文档(DOM)中且可见(不通过 display: none )。初始高度是在安装时计算的。如果浏览器客户端(本身或通过 polyfill )支持 IntersectionObserver ,则 <b-form-textarea> 将利用此优势确定何时可以看到文本区域,然后计算高度。请参阅入门页面上的 Browser support【浏览器支持】部分。

上下文状态

Bootstrap 包括大多数表单控件上 valid【有效】和 invalid【无效】状态的验证样式。

一般来说,您需要针对特定类型的反馈使用特定状态:

  • false(表示无效状态)非常适合存在阻塞或必填字段的情况。 用户必须正确填写此字段才能提交表单。
  • true(表示有效状态)非常适合在整个表单中都进行逐字段验证并希望鼓励用户遍历其余字段的情况。
  • null 不显示验证状态(既不有效也不无效)

要在 <b-form-textarea> 上应用上下文状态图标之一,请将 state 属性设置为 false(对于无效),true(对于有效)或 null(无验证状态)。

<template>
  <div>
    <b-form-textarea
      id="textarea-state"
      v-model="text"
      :state="text.length >= 10"
      placeholder="Enter at least 10 characters"
      rows="3"
    ></b-form-textarea>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        text: ''
      }
    }
  }
</script>

向辅助技术和色盲用户传达上下文状态

使用这些上下文状态来表示表单控件的状态仅提供基于颜色的可视指示,而不会将其传达给辅助技术的用户(例如屏幕阅读器)或色盲用户。

确保还提供了备用状态指示。 例如,您可以在表单控件的 <label> 文本本身中包含有关状态的提示,或者通过提供其他帮助文本块来提供提示。

aria-invalid 属性

<b-form-textarea> 具有无效的上下文状态(即状态为 false )时,您可能还希望将 aria-invalid 属性设置为 true 或支持的值之一:

  • false: 无错误(默认)
  • true'true': 该值验证失败。
  • 'grammar': 检测到语法错误。
  • 'spelling' 检测到拼写错误。

如果 state 属性设置为 false ,并且未显式设置 aria-invalid 属性,则 <b-form-textarea> 将自动将 aria-invalid 属性设置为'true'

格式化支持

<b-form-textarea>(可选)通过将函数引用传递给 formatter 属性支持格式化。

当控件的本机 inputchange 事件触发时,就会发生格式化(提供格式化程序功能时)。您可以使用 boolean lazy-formatter 属性将格式化程序功能限制为在控件的本机 blur 事件上调用。

formatter 函数接收两个参数:输入元素的原始 value 和触发格式的本机 event 对象(如果有)。

formatter 函数应将格式化后的值作为 string 返回。

如果未提供 formatter ,则不会进行格式化。

We will convert your text to lowercase instantly

Value:

This one is a little lazy!

Value:

<template>
  <div>
    <b-form-group
      class="mb-0"
      label="Textarea with formatter (on input)"
      label-for="textarea-formatter"
      description="We will convert your text to lowercase instantly"
    >
      <b-form-textarea
        id="textarea-formatter"
        v-model="text1"
        placeholder="Enter your text"
        :formatter="formatter"
      ></b-form-textarea>
    </b-form-group>
    <p style="white-space: pre-line"><b>Value:</b> {{ text1 }}</p>

    <b-form-group
      class="mb-0"
      label="Textarea with lazy formatter (on blur)"
      label-for="textarea-lazy"
      description="This one is a little lazy!"
    >
      <b-form-textarea
        id="textarea-lazy"
        v-model="text2"
        placeholder="Enter your text"
        lazy-formatter
        :formatter="formatter"
      ></b-form-textarea>
    </b-form-group>
    <p class="mb-0" style="white-space: pre-line"><b>Value:</b> {{ text2 }}</p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        text1: '',
        text2: ''
      }
    },
    methods: {
      formatter(value) {
        return value.toLowerCase()
      }
    }
  }
</script>

注意: 对于非延迟格式,如果光标不在输入值的 末尾 ,则键入字符后光标可能会跳到末尾。您可以使用提供的事件对象和 event.target 来访问本机输入的选择方法和属性,以控制插入点的位置。这留给读者练习。

只读纯文本

如果要在表单中将 <b-form-textarea readonly> 元素设置为纯文本样式,请设置 plaintext 属性(无需设置 readonly ,因为它将自动设置)以删除默认表单字段样式并保留正确的样式 文字大小,边距,填充和高度。

<template>
  <div>
    <b-form-textarea id="textarea-plaintext" plaintext :value="text"></b-form-textarea>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        text: "This is some text.\nIt is read only and doesn't look like an input."
      }
    }
  }
</script>

v-model 修饰语

Vue 在基于自定义组件的输入的 v-model 上不正式支持 .lazy.trim ,和 .number 修饰符,并且可能会产生不良的用户体验。避免使用 Vue 的本机修饰符。

为了解决这个问题,<b-form-textarea> 具有三个布尔属性 trimnumber ,和 lazy ,它们分别模拟本地 Vue v-model 修饰符 .trim.number.lazylazy 属性将在 change/blur 事件上更新 v-model。

注意:

  • number 属性优先于 trim 属性(即,设置 numbertrim 不会生效)。
  • 使用 number 属性时,如果可以将值解析为数字(通过 parseFloat ),它将返回 Number 类型的值到 v-model ,否则,原始输入值将以 String 类型返回。这与本机 .number 修饰符的行为相同。
  • trimnumber 修饰符道具不会影响 inputchange 事件返回的值。可选格式设置之后,这些事件将始终返回 <textarea> 内容的字符串值(该值可能与通过处理修饰符的 v-model update 事件返回的值不匹配)。

防反跳支持

作为 lazy 修饰符属性的替代,<b-form-textarea> 可选地支持反跳用户输入,在从用户输入最后一个字符(或发生 change 事件)开始的一段空闲时间后更新 v-model 。如果用户在空闲超时到期之前输入新字符(或删除字符),则会重新启动超时。

要启用反跳,请将 debounce 属性设置为大于零的任何整数。该值以毫秒为单位指定。将防反跳设置为 0 将禁用 debounce

注意:如果设置了 lazy 属性,则 不会 发生反跳。


<template>
  <div>
    <b-form-textarea v-model="value" debounce="500" rows="3" max-rows="5"></b-form-textarea>
    <pre class="mt-2 mb-0">{{ value }}</pre>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        value: ''
      }
    }
  }
</script>

自动获取焦点

autofocus 属性设置为 <b-form-textarea> 时,将文本区域插入(即 mounted【安装】)到文档中时将自动对焦,或者在 Vue <keep-alive>组件内部重新激活时。请注意,此道具 不会 在文本区域上设置 autofocus 属性,也无法告诉该文本区域何时可见。

本机和自定义事件

支持所有本机事件(自定义 inputchange 事件除外),而无需 .native 修饰符。

定制 inputchange 事件接收当前 value 的单个参数(在应用任何格式之后),并由用户交互触发。

自定义 update 事件传递给输入值,并在 v-model 需要更新时发出(在需要 inputchange ,和 blur 之前发出)。

您始终可以使用 .native 修饰符访问本机 inputchange 事件。

公开的 input 属性和方法

<b-form-textarea> 在组件引用中暴露了几个本机输入元素的属性和方法(例如,将一个 ref 赋值给 <b-form-textarea ref="foo" ...> 和使用 this.$refs['foo'].propertyNamethis.$refs['foo'].methodName(...))。

Input 属性

属性 注意
.selectionStart Read/Write
.selectionEnd Read/Write
.selectionDirection Read/Write
.validity Read only
.validationMessage Read only
.willValidate Read only

Input 方法

方法 注意
.focus() input 焦点
.blur() 从 input 中移出焦点
.select() 选择 input 中的所有文本
.setSelectionRange()
.setRangeText()
.setCustomValidity()
.checkValidity()
.reportValidity()

有关这些方法和属性的更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement 支持因 input 类型而异。

组件引用

<b-form-textarea>

组件别名

<b-form-textarea> 也可以通过以下别名使用:

  • <b-textarea>

注意:组件别名仅在导入所有 BootstrapVue 或使用组件组插件时可用。

属性

属性 (Click to sort Ascending) 类型 默认值 描述
id String 用于在渲染的内容上设置“id”属性,并用作根据需要生成任何其他元素ID的基础
name String 设置表单控件上“name”属性的值
disabled Boolean 设置为“true”时,禁用组件的功能并将其置于禁用状态
required Boolean false 将“required”属性添加到表单控件
form String 表单控件所属的表单的ID。在控件上设置“form”属性
autofocus Boolean false 设置为“true”时,尝试在安装控件时自动将其调焦,或者在保持活动状态时将其重新激活。未在控件上设置“autofocus”属性
size String 设置组件外观的大小。'sm','md'(默认)或'lg'
state Boolean 控制组件的验证状态外观。“true”表示有效,“false”表示无效”,“null”表示无验证状态
value v-model String or Number 文本区域的当前值。结果将始终为字符串,除非使用“number”属性
aria-invalid Boolean or String false 将 aria-invalid 属性设置为指定值
readonly Boolean false 在表单控件上设置“readonly”属性
plaintext Boolean false 将表单控件设置为只读,并使该控件看起来像纯文本(无边框)
autocomplete String 在表单控件上设置“autocomplete”属性值
placeholder String 在表单控件上设置“placeholder”属性值
formatter Function 引用格式化文本区域的功能
lazy-formatter Boolean false 设置后,将文本区域格式化为失焦格式,而不是每个按键(如果指定了格式化程序)
trim Boolean false 设置后,从输入值中修剪所有前导和尾随空白。模拟 Vue '.trim' v-model 修改器
number Boolean false 设置时,尝试将输入值转换为本地数字。模拟 Vue '.number' v-model 修改器
lazy v2.1.0+ Boolean false 设置后,在'change'/'blur'事件而不是'input'上更新 v-model 。模拟 Vue '.lazy' v-model 修改器
debounce v2.1.0+ Number or String 0 设置为大于零的毫秒数时,将消除用户输入的反跳。如果设置了“lazy”属性,则无效
rows Number or String 2 要显示的最小行数。 必须大于1的值
max-rows Number or String 要显示的最大行数。提供时,文本区域将增长(或缩小)以使内容适合最大行数
wrap String 'soft' 放置在textarea的'wrap'属性上的值。 控制如何返回换行符
no-resize Boolean false 设置后,禁用浏览器的调整大小句柄,以防止用户更改文本区域的高度。 在自动高度模式下自动设置
no-auto-shrink Boolean false 设置后,防止自动高度文本区域缩小以适合内容

v-model

属性 事件
value update

事件

事件 参数 描述
input
  1. value - textarea 的当前值
用户交互触发的输入事件。在任何格式(不包括 'trim' or 'number' 属性)之后以及更新v-model后发出
change
  1. value - textarea 的当前值
由用户交互触发的更改事件。在任何格式(不包括'trim'或'number'属性)和v模型更新后发出。
update
  1. value - 格式化后的 textarea 值。如果值不变,则不发出
发出以更新 v-model
blur
  1. event - 本机 blur 事件(在发生任何可选格式之前)
textarea 失去焦点后发出

导入单个组件

您可以通过以下命名的导出将单个组件导入到项目中:

组件 命名输出 导入路径
<b-form-textarea> BFormTextarea bootstrap-vue

示例:

import { BFormTextarea } from 'bootstrap-vue'
Vue.component('b-form-textarea', BFormTextarea)

导入为Vue.js插件

该插件包括上面列出的所有单个组件。插件还包括任何组件别名。

命名输出 导入路径
FormTextareaPlugin bootstrap-vue

示例:

import { FormTextareaPlugin } from 'bootstrap-vue'
Vue.use(FormTextareaPlugin)