ion-input
输入组件是 HTML 输入元素的一个封装器,具有自定义样式和附加功能。它接受大多数与 HTML 输入相同的属性,并与移动设备上的键盘集成。
🌐 The input component is a wrapper to the HTML input element with custom styling and additional functionality. It accepts most of the same properties as the HTML input and integrates with the keyboard on mobile devices.
基本用法
🌐 Basic Usage
类型
🌐 Types
该输入组件仅用于文本类型输入,例如 "text"、"password"、"email"、"number"、"search"、"tel" 和 "url"。它支持所有标准文本输入事件,包括 keyup、keydown、keypress 等。默认的 type 是 "text"。
🌐 The input component is meant for text type inputs only, such as "text", "password", "email", "number", "search", "tel", and "url". It supports all standard text input events including keyup, keydown, keypress, and more. The default type is "text".
标签
🌐 Labels
标签应用于描述输入。它们可以以视觉方式使用,当用户聚焦于输入时,屏幕阅读器也会朗读它们。这使用户能够轻松理解输入的意图。输入有几种方式来分配标签:
🌐 Labels should be used to describe the input. They can be used visually, and they will also be read out by screen readers when the user is focused on the input. This makes it easy for the user to understand the intent of the input. Input 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 input is accessible to screen readers.
清除选项
🌐 Clear Options
输入框提供了两种根据交互方式清除输入的选项。第一种方式是添加 clearInput 属性,当输入框有 value 时会显示清除按钮。第二种方式是 clearOnEdit 属性,它会在输入框失去焦点后再次输入时清除内容。设置了 type 为 "password" 的输入框默认会启用 clearOnEdit。
🌐 Inputs offer two options for clearing the input based on how you interact with it. The first way is by adding the clearInput property which will show a clear button when the input has a value. The second way is the clearOnEdit property which will clear the input after it has been blurred and then typed in again. Inputs with a type set to "password" will have clearOnEdit enabled by default.
填充输入
🌐 Filled Inputs
Material Design 为输入提供了填充样式。输入上的 fill 属性可以设置为 "solid" 或 "outline"。
🌐 Material Design offers filled styles for an input. The fill property on the input can be set to either "solid" or "outline".
通过将输入的 mode 设置为 md,已填充的输入可以在 iOS 上使用。
🌐 Filled inputs can be used on iOS by setting the input's mode to md.
使用 fill 的输入不应在 ion-item 中使用,因为组件之间的样式存在冲突。
辅助程序和错误文本
🌐 Helper & Error Text
帮助文本和错误文本可以在使用 helperText 和 errorText 属性的输入框中使用。除非将 ion-invalid 和 ion-touched 类添加到 ion-input 中,否则错误文本将不会显示。这确保了在用户有机会输入数据之前不会显示错误。
🌐 Helper and error text can be used inside of an input 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-input. 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.
输入计数器
🌐 Input Counter
输入计数器是在输入框下方显示的文本,用于通知用户已输入的字符数占输入框可接受的总字符数。当添加计数器时,默认行为是将显示的值格式化为 inputLength / maxLength。此行为可以通过向 counterFormatter 属性传入一个格式化函数来定制。
🌐 The input counter is text that displays under an input to notify the user of how many characters have been entered out of the total that the input 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.
ion-item 上的 counter 和 counterFormatter 属性在 Ionic 7 中已被弃用,应直接在 ion-input 上使用。
🌐 The counter and counterFormatter properties on ion-item were deprecated in Ionic 7 and should be used directly on ion-input instead.
带计数器的输入在输入框和计数器之间添加边框,因此不应将它们放置在添加额外底部边框的 ion-item 内。可以添加 ion-padding-start 类,以使计数器输入与项内部的输入对齐。
🌐 Inputs with a counter add a border between the input and the counter, therefore they should not be placed inside of an ion-item which adds an additional border under the item. The ion-padding-start class can be added to align the counter inputs with inputs inside of items.
过滤用户输入
🌐 Filtering User Input
开发者可以使用 ionInput 事件根据用户输入(例如 keypress)来更新输入值。这对于过滤无效或不需要的字符非常有用。
🌐 Developers can use the ionInput event to update the input value in response to user input such as a keypress. This is useful for filtering out invalid or unwanted characters.
在将值存储在状态变量中时,我们建议同时更新状态变量和 ion-input 组件的值。这可以确保状态变量和 ion-input 组件的值保持同步。
🌐 When storing the value in a state variable, we recommend updating both the state variable and the ion-input component value. This ensures that the state variable and the ion-input component value remain in sync.
输入屏蔽
🌐 Input Masking
输入掩码是限制输入以支持有效输入值的表达式。Ionic 建议使用 Maskito 进行输入掩码。Maskito 是一个轻量级、无依赖的输入字段掩码库。它支持各种掩码,包括电话号码、信用卡、日期等。
🌐 Input masks are expressions that constrain input to support valid input values. Ionic recommends using Maskito for input masking. Maskito is a lightweight, dependency-free library for masking input fields. It supports a wide range of masks, including phone numbers, credit cards, dates, and more.
要开始使用 Maskito,请安装该库:
🌐 To get started with Maskito, install the library:
npm install @maskito/core @maskito/{angular,react,vue}
请通过 Maskito Github 仓库 提交 Maskito 的错误报告。如需技术支持,请使用 Ionic 论坛 或 Ionic Discord。
🌐 Please submit bug reports with Maskito to the Maskito Github repository. For technical support, please use the Ionic Forum or Ionic Discord.