FormKit附带了一个来自@formkit/addons
包的第一方多步输入插件。此输入允许您构建向导或轻松地将表单分为多个步骤。将表单分为多个步骤可以通过使它们保持小巧且易于接近,而不是一次列出所有输入,从而提高较大表单的用户体验。
首先,从@formkit/addons
中导入createMultiStepPlugin
以及相应的样式。样式完全独立,不依赖于FormKit附带的genesis
主题。这意味着,如果您使用Tailwind为输入设置样式,那么在multi-step
输入类型中包装的输入样式仍将按预期显示。
// formkit.config.js
import { defaultConfig } from '@formkit/vue'
import { createMultiStepPlugin } from '@formkit/addons'
import '@formkit/addons/css/multistep'
const config = defaultConfig({
plugins: [createMultiStepPlugin()],
})
export default config
multi-step
输入类型实际操作的快速演示:createMultiStepPlugin
函数为您注册了两个新的输入类型,供您与FormKit
组件一起使用。
multi-step
:整个多步输入的包装组。此输入跟踪哪个步骤处于活动状态,每个步骤的验证和错误,并且其直接子级应仅包含step
输入step
:多步输入中给定步骤的包装组。应仅作为multi-step
输入的直接子级。其子级将作为步骤的内容呈现。将这些输入一起使用就像在多步表单中的步骤中包含您想要呈现的任何标记一样简单。
<FormKit type="multi-step">
<FormKit type="step" name="stepOne">
<!-- 步骤一的内容在这里! -->
</FormKit>
</FormKit>
开箱即用的父multi-step
输入将跟踪每个子step
输入中包含的输入的有效性,并阻止在当前步骤有效之前前进到下一个step
。如果用户尝试在满足当前步骤的输入验证之前前进到下一步或提交表单,则阻止验证和错误的总计数将显示在当前步骤名称旁边。
multi-step
输入提供了两种可用的标签页样式。
tab
:默认的标签页体验。每个步骤名称都显示在一个带有活动状态的标签中。错误计数显示在标签的右上角。progress
:一个进度条样式,其中每个步骤都是总步骤时间线上的一个“节点”。使用此显示模式,您还可以使用 hide-progress-labels
属性来隐藏步骤名称。默认情况下,multi-step
输入将使用其子 step
输入的 name
属性来为步骤生成标签。如果您希望更好地控制步骤名称的显示,可以使用 label
属性。您还可以使用 previous-label
和 next-label
属性自定义在 stepActions
部分中显示的标签。
label
:应显示在多步骤标签中的步骤名称的替代。previous-label
:stepPrevious
按钮标签的替代,默认为 Back
。next-label
:stepNext
按钮标签的替代,默认为 Next
。默认情况下,multi-step
输入将允许在当前步骤或当前步骤与目标步骤之间的步骤具有阻止验证消息的情况下,前进到后面的步骤。要阻止用户跳过,请将 allow-incomplete
属性设置为 false
。
当一个步骤完成且没有验证错误时,multi-step
输入将默认渲染一个检查图标,显示该步骤有效且不需要采取更多操作。valid-step-icon
是一个 FormKit 图标,可以通过属性像其他 FormKit 图标一样进行更改。
您可以:
multi-step
输入上的 valid-step-icon
,以更改输入内所有步骤的图标。step
输入上的 valid-step-icon
,以更改或覆盖该步骤的图标。在 multi-step
输入中的每个 step
都有默认的按钮用于在步骤之间移动。默认情况下,multi-step
中的第一个 step
只会渲染一个 stepNext
操作按钮,最后一个 step
只会有一个 stepPrevious
操作按钮。这使得多步骤可以作为一个独立的组在更大的表单上下文中使用。
如果您想在 multi-step
中添加一个自定义操作,例如表单提交 —— 如果您将 multi-step
作为整个表单使用,这是非常有用的 —— 您可以通过覆盖所需步骤上的 stepNext
插槽来实现。在这种情况下,我们将在 multi-step
输入的最后一步中添加一个 submit
输入以提交表单。
stepNext
和 stepPrevious
部分可以访问 incrementStep
处理程序 —— 它返回一个可调用的函数 —— 以实现编程导航。
默认情况下,多步输入中的 stepNext
使用事件监听器捕获通过键盘的选项卡导航,并允许用户在多步输入中循环浏览所有可用步骤。
如果您希望在自定义的 stepNext
实现中保留此行为,请确保在触发步骤导航的可聚焦元素上添加 data-next="true"
属性。
有时您需要在步骤之间对表单数据进行_操作_。也许您想要将每个步骤独立提交给后端,或者您需要记录分析事件以确定用户在表单中进行了多远。在这种情况下,您可以使用 beforeStepChange
事件。beforeStepChange
接受一个函数,并提供一个带有以下键的上下文对象:
currentStep
:用户即将离开的当前活动步骤节点上下文对象。targetStep
:用户即将导航到的步骤节点上下文对象。delta
:步骤之间的距离。正整数表示向前迈进,负整数表示向后迈进。您的 beforeStepChange
函数应返回一个 Boolean
。返回 false
将_阻止_步骤更改发生。
beforeStepChange
可以用于您的 multi-step
输入,在这种情况下,它将应用于_所有_步骤。此外,您还可以在特定的 step
输入上使用 beforeStepChange
,仅在从分配了该函数的步骤导航时运行您的函数。在 step
上应用的 beforeStepChange
将覆盖任何在父 multi-step
上设置的 beforeStepChange
(如果存在)。
Prop | Type | 默认 | 描述 |
---|---|---|---|
allowIncomplete | boolean | true | 当值为true 时,即使当前步骤无效,也允许用户在步骤之间导航。 |
tabStyle | string | tab | 用于设置创建选项卡样式的数据属性。默认主题支持tab 和progress 选项卡样式。 |
hideProgressLabels | boolean | false | 为真时,隐藏progress 选项卡样式的标签。 |
validStepIcon | string | check | 指定在步骤有效时放在badge 部分的图标。应用于multi-step 时,图标将应用于所有子step 输入。 |
beforeStepChange | function | undefined | 在更改活动步骤之前运行的函数。该函数提供了一个上下文对象,其中包含currentStep 和targetStep ,它们都是FormKit node 上下文对象。此外,delta 作为一个整数提供,反映了currentStep 和targetStep 之间的距离。当提供给multi-step 时,此函数将在每个step 更改时触发。 |
显示 通用 props | |||
config | Object | {} | 提供给 input 的节点和此输入的任何后代节点的配置选项。 |
delay | Number | 20 | 在调度 commit hook 前,输入值的去抖动毫秒数。 |
dirtyBehavior | string | touched | 确定此输入的“dirty”标志设置方式。可以设置为 touched 或 compare — 默认为 touched ,性能更好,但无法检测表单是否再次匹配其初始状态。 |
errors | Array | [] | 要在此字段上显示的错误消息的字符串数组。 |
help | String | '' | 帮助文本与输入关联的文本。 |
id | String | input_{n} | 输入的唯一标识符。提供一个 id 还可以全局访问输入的节点。 |
ignore | Boolean | false | 防止将输入包含在任何父级(组、列表、表单等)中。在仅用于 UI 而不是实际值的情况下非常有用。 |
index | Number | undefined | 如果父级是列表,允许在给定索引处插入输入。如果输入的值未定义,它将继承该索引位置的值。如果它有一个值,它将在给定索引处将其插入到列表的值中。 |
label | String | '' | 与输入关联的 label 元素的文本。 |
name | String | input_{n} | 输入的名称,在数据对象中唯一标识。在一组字段中应该是唯一的。 |
parent | FormKitNode | contextual | 默认情况下,父级是包装组、列表或表单,但此属性允许显式分配父级节点。 |
prefix-icon | String | '' | 指定放置在 prefixIcon 部分的 图标。 |
preserve | boolean | false | 在输入卸载时,在父组、列表或表单上保留输入的值。 |
preserve-errors | boolean | false | 默认情况下,使用 setErrors 在输入上设置的错误会在输入时自动清除,将此属性设置为 true 可以保留错误,直到明确清除为止。 |
sections-schema | Object | {} | 一个包含部分键和模式部分值的对象,其中每个模式部分应用于相应的部分。 |
suffix-icon | String | '' | 指定放置在 suffixIcon 部分的 图标。 |
type | String | text | 要从库中渲染的输入类型。 |
validation | String, Array | [] | 要应用于输入的 验证 规则。 |
validation-visibility | String | blur | 确定何时显示输入的验证失败规则。有效值为 blur 、dirty 和 live 。 |
validation-label | String | {label prop} | 确定在验证错误消息中使用的标签,默认情况下,如果可用,则使用 label 属性,否则使用 name 属性。 |
validation-rules | Object | {} | 附加的自定义验证规则,可用于验证 prop。 |
value | Any | undefined | 为输入和/或其子元素提供初始值。不是响应式的。可以种子 整个组(表单)和列表。 |
Prop | Type | 默认 | 描述 |
---|---|---|---|
label | string | 用于更改步骤的选项卡标签。如果没有提供自定义标签,则将使用步骤的name 。 | |
previousLabel | string | Previous | 用于更改默认previousAction 按钮的标签。 |
nextLabel | string | Next | 用于更改默认nextAction 按钮的标签。 |
previousAttrs | object | [object Object] | 用于将属性应用于默认previousAction 按钮输入。 |
nextAttrs | object | [object Object] | 用于将属性应用于默认nextAction 按钮输入。 |
validStepIcon | string | check | 指定在步骤有效时放在badge 部分的图标。当应用于step 时,图标将仅应用于目标step 。 |
beforeStepChange | function | undefined | 在更改活动步骤之前运行的函数。该函数提供了一个上下文对象,其中包含currentStep 和targetStep ,它们都是FormKit node 上下文对象。此外,delta 作为一个整数提供,反映了currentStep 和targetStep 之间的距离。当提供给step 时,此函数将仅在从指定step 导航时触发。 |
显示 通用 props | |||
config | Object | {} | 提供给 input 的节点和此输入的任何后代节点的配置选项。 |
delay | Number | 20 | 在调度 commit hook 前,输入值的去抖动毫秒数。 |
dirtyBehavior | string | touched | 确定此输入的“dirty”标志设置方式。可以设置为 touched 或 compare — 默认为 touched ,性能更好,但无法检测表单是否再次匹配其初始状态。 |
errors | Array | [] | 要在此字段上显示的错误消息的字符串数组。 |
help | String | '' | 帮助文本与输入关联的文本。 |
id | String | input_{n} | 输入的唯一标识符。提供一个 id 还可以全局访问输入的节点。 |
ignore | Boolean | false | 防止将输入包含在任何父级(组、列表、表单等)中。在仅用于 UI 而不是实际值的情况下非常有用。 |
index | Number | undefined | 如果父级是列表,允许在给定索引处插入输入。如果输入的值未定义,它将继承该索引位置的值。如果它有一个值,它将在给定索引处将其插入到列表的值中。 |
label | String | '' | 与输入关联的 label 元素的文本。 |
name | String | input_{n} | 输入的名称,在数据对象中唯一标识。在一组字段中应该是唯一的。 |
parent | FormKitNode | contextual | 默认情况下,父级是包装组、列表或表单,但此属性允许显式分配父级节点。 |
prefix-icon | String | '' | 指定放置在 prefixIcon 部分的 图标。 |
preserve | boolean | false | 在输入卸载时,在父组、列表或表单上保留输入的值。 |
preserve-errors | boolean | false | 默认情况下,使用 setErrors 在输入上设置的错误会在输入时自动清除,将此属性设置为 true 可以保留错误,直到明确清除为止。 |
sections-schema | Object | {} | 一个包含部分键和模式部分值的对象,其中每个模式部分应用于相应的部分。 |
suffix-icon | String | '' | 指定放置在 suffixIcon 部分的 图标。 |
type | String | text | 要从库中渲染的输入类型。 |
validation | String, Array | [] | 要应用于输入的 验证 规则。 |
validation-visibility | String | blur | 确定何时显示输入的验证失败规则。有效值为 blur 、dirty 和 live 。 |
validation-label | String | {label prop} | 确定在验证错误消息中使用的标签,默认情况下,如果可用,则使用 label 属性,否则使用 name 属性。 |
validation-rules | Object | {} | 附加的自定义验证规则,可用于验证 prop。 |
value | Any | undefined | 为输入和/或其子元素提供初始值。不是响应式的。可以种子 整个组(表单)和列表。 |
Section-key | 描述 |
---|---|
tabs | 包围所有选项卡的容器。 |
tab | 一个包含选项卡名称和用于反映验证状态的装饰器的按钮元素。 |
tabLabel | 包含选项卡名称的 span 元素。 |
badge | 用作显示当前选项卡有效性状态的装饰器的 span 元素。 |
steps | 包围所有步骤的容器。 |
step | 包围来自默认插槽的步骤内容和步骤操作按钮的容器。每个步骤根据是否为当前活动步骤自动应用可见性样式。 |
stepInner | 包围步骤的默认插槽内容的容器。 |
stepActions | 包围用于在步骤之间移动的操作按钮的容器。 |
stepPrevious | 包围用于导航到上一步的操作按钮的容器。 |
stepNext | 包围用于导航到下一步的操作按钮的容器。 |
显示 通用 section keys | |
outer | 最外层的包装元素。 |
wrapper | 标签和输入周围的包装器。 |
label | 输入的标签。 |
prefix | 默认情况下没有输出,但允许直接在输入元素之前放置内容。 |
prefixIcon | 输出在前缀部分之前放置一个图标的元素。 |
inner | 实际输入元素周围的包装器。 |
suffix | 默认情况下没有输出,但允许直接在输入元素之后放置内容。 |
suffixIcon | 输出在后缀部分之后放置一个图标的元素。 |
input | 输入元素本身。 |
help | 包含帮助文本的元素。 |
messages | 包装所有消息的容器。 |
message | 包含消息的元素(或多个元素) - 最常见的是验证和错误消息。 |