Skip to main content

ion-textarea

scoped

textarea 组件用于多行文本输入。组件内部渲染了一个原生的 textarea 元素。通过控制原生 textarea,可以提升 textarea 组件的用户体验和交互性。

🌐 The textarea component is used for multi-line text input. A native textarea element is rendered inside of the component. The user experience and interactivity of the textarea component is improved by having control over the native textarea.

与原生的 textarea 元素不同,Ionic 的 textarea 不支持从内部内容加载其值。textarea 的值应设置在 value 属性中。

🌐 Unlike the native textarea element, the Ionic textarea does not support loading its value from the inner content. The textarea value should be set in the value attribute.

除 Ionic 属性外,textarea 组件还接受 原生 textarea 属性

🌐 The textarea component accepts the native textarea attributes in addition to the Ionic properties.

基本用法

🌐 Basic Usage

标签

🌐 Labels

应使用标签来描述文本区域。它们可以用于视觉显示,并且当用户聚焦于文本区域时,屏幕阅读器也会读取它们。这使用户能够轻松理解文本区域的用途。文本区域有几种方式来分配标签:

🌐 Labels should be used to describe the textarea. They can be used visually, and they will also be read out by screen readers when the user is focused on the textarea. This makes it easy for the user to understand the intent of the textarea. Textarea has several ways to assign a label:

  • label 属性:用于明文标签
  • label 插槽:用于自定义 HTML 标签(实验性)
  • aria-label:用于为屏幕阅读器提供标签,但不添加可见标签

标签放置

🌐 Label Placement

标签默认会占据其内容的宽度。开发者可以使用 labelPlacement 属性来控制标签相对于控件的放置方式。

🌐 Labels will take up the width of their content by default. Developers can use the labelPlacement property to control how the label is placed relative to the control.

标签槽(实验性)

🌐 Label Slot (experimental)

虽然明文标签应通过 label 属性传入,但如果需要自定义 HTML,则可以通过 label 插槽传入。

🌐 While plaintext labels should be passed in via the label property, if custom HTML is needed, it can be passed through the label slot instead.

请注意,此功能被视为实验性功能,因为它依赖于Web 组件插槽的模拟版本。因此,模拟行为可能与原生插槽行为不完全相同。

🌐 Note that this feature is considered experimental because it relies on a simulated version of Web Component slots. As a result, the simulated behavior may not exactly match the native slot behavior.

无可见标签

🌐 No Visible Label

即使不需要可见标签,开发者仍应提供一个 aria-label,以便屏幕阅读器可以访问文本区域。

🌐 If no visible label is needed, developers should still supply an aria-label so the textarea is accessible to screen readers.

填充文本区域

🌐 Filled Textareas

Material Design 为文本区提供填充样式。项目上的 fill 属性可以设置为 "solid""outline"

🌐 Material Design offers filled styles for a textarea. The fill property on the item can be set to either "solid" or "outline".

在 iOS 上可以通过将 textarea 的 mode 设置为 md 来使用已填充的文本区域。

🌐 Filled textareas can be used on iOS by setting the textarea's mode to md.

warning

使用 fill 的文本区域不应在 ion-item 中使用,因为组件之间存在样式冲突。

辅助程序和错误文本

🌐 Helper & Error Text

帮助文本和错误文本可以在使用 helperTexterrorText 属性的文本区域中使用。除非将 ion-invalidion-touched 类添加到 ion-textarea 中,否则错误文本不会显示。这确保了在用户有机会输入数据之前不会显示错误。

🌐 Helper and error text can be used inside of a textarea with the helperText and errorText property. The error text will not be displayed unless the ion-invalid and ion-touched classes are added to the ion-textarea. This ensures errors are not shown before the user has a chance to enter data.

在 Angular 中,这通过表单验证自动补齐。在 JavaScript、React 和 Vue 中,需要根据你自己的验证手动添加类。

🌐 In Angular, this is done automatically through form validation. In JavaScript, React and Vue, the class needs to be manually added based on your own validation.

文本区域计数器

🌐 Textarea Counter

textarea 计数器是在 textarea 下方显示的文本,用于通知用户已输入的字符数占 textarea 可接受的总字符数的比例。添加计数器时,默认行为是将显示的值格式化为 inputLength / maxLength。此行为可以通过向 counterFormatter 属性传入格式化函数来定制。

🌐 The textarea counter is text that displays under a textarea to notify the user of how many characters have been entered out of the total that the textarea will accept. When adding counter, the default behavior is to format the value that gets displayed as inputLength / maxLength. This behavior can be customized by passing in a formatter function to the counterFormatter property.

自动增长

🌐 Autogrow

autoGrow 属性设置为 true 时,文本区域会根据其内容自动增大或缩小。

🌐 When the autoGrow property is set to true, the textarea will grow and shrink based on its contents.

编辑时清除

🌐 Clear on Edit

clearOnEdit 属性设置为 true 将在文本区域失去焦点后再次输入时清空它。

🌐 Setting the clearOnEdit property to true will clear the textarea after it has been blurred and then typed in again.

开始和结束槽(实验)

🌐 Start and End Slots (experimental)

startend 插槽可用于在文本区域的任一侧放置图标、按钮或前缀/后缀文本。

🌐 The start and end slots can be used to place icons, buttons, or prefix/suffix text on either side of the textarea.

请注意,此功能被视为实验性功能,因为它依赖于Web 组件插槽的模拟版本。因此,模拟行为可能与原生插槽行为不完全相同。

🌐 Note that this feature is considered experimental because it relies on a simulated version of Web Component slots. As a result, the simulated behavior may not exactly match the native slot behavior.

note

在大多数情况下,放置在这些插槽中的 Icon 组件应具有 aria-hidden="true"。有关更多信息,请参阅 图标无障碍文档

如果插槽内容是为了互动的,应将其封装在交互元素中,例如 Button。这确保了内容可以通过 Tab 键跳转。

🌐 If slot content is meant to be interacted with, it should be wrapped in an interactive element such as a Button. This ensures that the content can be tabbed to.

主题化

🌐 Theming

接口

🌐 Interfaces

TextareaChangeEventDetail

interface TextareaChangeEventDetail {
value?: string | null;
}

TextareaCustomEvent

虽然不是必需的,但可以使用此接口替代 CustomEvent 接口,以便对从此组件发出的 Ionic 事件进行更强类型的处理。

🌐 While not required, this interface can be used in place of the CustomEvent interface for stronger typing with Ionic events emitted from this component.

interface TextareaCustomEvent extends CustomEvent {
detail: TextareaChangeEventDetail;
target: HTMLIonTextareaElement;
}

属性

🌐 Properties

autoGrow

DescriptionIf true, the textarea container will grow and shrink based on the contents of the textarea.
Attributeauto-grow
Typeboolean
Defaultfalse

autocapitalize

DescriptionIndicates whether and how the text value should be automatically capitalized as it is entered/edited by the user. Available options: "off", "none", "on", "sentences", "words", "characters".
Attributeautocapitalize
Typestring
Default'none'

autofocus

DescriptionSets the autofocus attribute on the native input element.

This may not be sufficient for the element to be focused on page load. See managing focus for more information.
Attributeautofocus
Typeboolean
Defaultfalse

clearOnEdit

DescriptionIf true, the value will be cleared after focus upon edit.
Attributeclear-on-edit
Typeboolean
Defaultfalse

color

DescriptionThe color to use from your application's color palette. Default options are: "primary", "secondary", "tertiary", "success", "warning", "danger", "light", "medium", and "dark". For more information on colors, see theming.
Attributecolor
Type"danger" | "dark" | "light" | "medium" | "primary" | "secondary" | "success" | "tertiary" | "warning" | string | undefined
Defaultundefined

cols

DescriptionThe visible width of the text control, in average character widths. If it is specified, it must be a positive integer.
Attributecols
Typenumber | undefined
Defaultundefined

counter

DescriptionIf true, a character counter will display the ratio of characters used and the total character limit. Developers must also set the maxlength property for the counter to be calculated correctly.
Attributecounter
Typeboolean
Defaultfalse

counterFormatter

DescriptionA callback used to format the counter text. By default the counter text is set to "itemLength / maxLength".

See https://ionicframework.com/docs/troubleshooting/runtime#accessing-this if you need to access this from within the callback.
Attributeundefined
Type((inputLength: number, maxLength: number) => string) | undefined
Defaultundefined

debounce

DescriptionSet the amount of time, in milliseconds, to wait to trigger the ionInput event after each keystroke.
Attributedebounce
Typenumber | undefined
Defaultundefined

disabled

DescriptionIf true, the user cannot interact with the textarea.
Attributedisabled
Typeboolean
Defaultfalse

enterkeyhint

DescriptionA hint to the browser for which enter key to display. Possible values: "enter", "done", "go", "next", "previous", "search", and "send".
Attributeenterkeyhint
Type"done" | "enter" | "go" | "next" | "previous" | "search" | "send" | undefined
Defaultundefined

errorText

DescriptionText that is placed under the textarea and displayed when an error is detected.
Attributeerror-text
Typestring | undefined
Defaultundefined

fill

DescriptionThe fill for the item. If "solid" the item will have a background. If "outline" the item will be transparent with a border. Only available in md mode.
Attributefill
Type"outline" | "solid" | undefined
Defaultundefined

helperText

DescriptionText that is placed under the textarea and displayed when no error is detected.
Attributehelper-text
Typestring | undefined
Defaultundefined

inputmode

DescriptionA hint to the browser for which keyboard to display. Possible values: "none", "text", "tel", "url", "email", "numeric", "decimal", and "search".
Attributeinputmode
Type"decimal" | "email" | "none" | "numeric" | "search" | "tel" | "text" | "url" | undefined
Defaultundefined

label

DescriptionThe visible label associated with the textarea.

Use this if you need to render a plaintext label.

The label property will take priority over the label slot if both are used.
Attributelabel
Typestring | undefined
Defaultundefined

labelPlacement

DescriptionWhere to place the label relative to the textarea. "start": The label will appear to the left of the textarea in LTR and to the right in RTL. "end": The label will appear to the right of the textarea in LTR and to the left in RTL. "floating": The label will appear smaller and above the textarea when the textarea is focused or it has a value. Otherwise it will appear on top of the textarea. "stacked": The label will appear smaller and above the textarea regardless even when the textarea is blurred or has no value. "fixed": The label has the same behavior as "start" except it also has a fixed width. Long text will be truncated with ellipses ("...").
Attributelabel-placement
Type"end" | "fixed" | "floating" | "stacked" | "start"
Default'start'

maxlength

DescriptionThis attribute specifies the maximum number of characters that the user can enter.
Attributemaxlength
Typenumber | undefined
Defaultundefined

minlength

DescriptionThis attribute specifies the minimum number of characters that the user can enter.
Attributeminlength
Typenumber | undefined
Defaultundefined

mode

DescriptionThe mode determines which platform styles to use.

This is a virtual property that is set once during initialization and will not update if you change its value after the initial render.
Attributemode
Type"ios" | "md"
Defaultundefined

name

DescriptionThe name of the control, which is submitted with the form data.
Attributename
Typestring
Defaultthis.inputId

placeholder

DescriptionInstructional text that shows before the input has a value.
Attributeplaceholder
Typestring | undefined
Defaultundefined

readonly

DescriptionIf true, the user cannot modify the value.
Attributereadonly
Typeboolean
Defaultfalse

required

DescriptionIf true, the user must fill in a value before submitting a form.
Attributerequired
Typeboolean
Defaultfalse

rows

DescriptionThe number of visible text lines for the control.
Attributerows
Typenumber | undefined
Defaultundefined

shape

DescriptionThe shape of the textarea. If "round" it will have an increased border radius.
Attributeshape
Type"round" | undefined
Defaultundefined

spellcheck

DescriptionIf true, the element will have its spelling and grammar checked.
Attributespellcheck
Typeboolean
Defaultfalse

value

DescriptionThe value of the textarea.
Attributevalue
Typenull | string | undefined
Default''

wrap

DescriptionIndicates how the control wraps text.
Attributewrap
Type"hard" | "off" | "soft" | undefined
Defaultundefined

事件

🌐 Events

NameDescriptionBubbles
ionBlurEmitted when the input loses focus.true
ionChangeThe ionChange event is fired when the user modifies the textarea's value. Unlike the ionInput event, the ionChange event is fired when the element loses focus after its value has been modified.

This event will not emit when programmatically setting the value property.
true
ionFocusEmitted when the input has focus.true
ionInputThe ionInput event is fired each time the user modifies the textarea's value. Unlike the ionChange event, the ionInput event is fired for each alteration to the textarea's value. This typically happens for each keystroke as the user types.

When clearOnEdit is enabled, the ionInput event will be fired when the user clears the textarea by performing a keydown event.
true

方法

🌐 Methods

getInputElement

DescriptionReturns the native <textarea> element used under the hood.
SignaturegetInputElement() => Promise<HTMLTextAreaElement>

setFocus

DescriptionSets focus on the native textarea in ion-textarea. Use this method instead of the global textarea.focus().

See managing focus for more information.
SignaturesetFocus() => Promise<void>

CSS 阴影部分

🌐 CSS Shadow Parts

No CSS shadow parts available for this component.

CSS 自定义属性

🌐 CSS Custom Properties

NameDescription
--backgroundBackground of the textarea
--border-colorColor of the border below the textarea when using helper text, error text, or counter
--border-radiusBorder radius of the textarea
--border-styleStyle of the border below the textarea when using helper text, error text, or counter
--border-widthWidth of the border below the textarea when using helper text, error text, or counter
--colorColor of the text
--highlight-color-focusedThe color of the highlight on the textarea when focused
--highlight-color-invalidThe color of the highlight on the textarea when invalid
--highlight-color-validThe color of the highlight on the textarea when valid
--highlight-heightThe height of the highlight on the textarea. Only applies to md mode.
--padding-bottomBottom padding of the textarea
--padding-endRight padding if direction is left-to-right, and left padding if direction is right-to-left of the textarea
--padding-startLeft padding if direction is left-to-right, and right padding if direction is right-to-left of the textarea
--padding-topTop padding of the textarea
--placeholder-colorColor of the placeholder text
--placeholder-font-styleStyle of the placeholder text
--placeholder-font-weightWeight of the placeholder text
--placeholder-opacityOpacity of the placeholder text

插槽

🌐 Slots

NameDescription
endContent to display at the trailing edge of the textarea. (EXPERIMENTAL)
labelThe label text to associate with the textarea. Use the labelPlacement property to control where the label is placed relative to the textarea. Use this if you need to render a label with custom HTML. (EXPERIMENTAL)
startContent to display at the leading edge of the textarea. (EXPERIMENTAL)