基础使用
配置式
注意
如果使用配置式,请确保全局使用了CasualUI,或者你也可以全局手动注册所有的表单相关组件
尺寸
表单项间隔尺寸
label排列方向、宽度、对齐方式
编辑下方的label相关属性,查看实时效果
自定义项列宽
表单验证 & 异步验证 & 验证状态
Casual UI 的表单验证,需要配合field
、rules
属性rules
为验证函数数组,每个验证函数为一个函数,该函数接受当前表单项对应值,返回:false | string | Promise<false | string>
,返回含义如下:
- 返回
false
则代表验证通过无错误 - 回
string
则代表有错误,并且返回值为具体的错误信息 - 返回
Promise
则代表异步验证,内容也是false
或者具体的string
类型错误信息
假设你想定义一个验证是否必填的验证规则,可以这样写:
const rule = v => (v ? false : '该项是必填的')
它的等价异步逻辑大概是这样:
const asyncRule = v =>
new Promise((resolve) => {
setTimeout(() => {
resolve(v ? false : '该项是必填的')
}, 1000)
})
同时,在下面的示例中:
爱好(hobbies)一栏,具有异步验证规则
自定义表单项
通过#[field]
插槽来自定义某个表单项,并且通过{ validate, clearValidate, hasError }
来自定义触发验证、清除验证的调用时机,以及错误状态的样式表现
高级
自定义表单组件自写组件,可以使用useValidator
获取当前表单项所处表单验证上下文,从而自定义验证方法、清除验证状态调用时机,以及错误状态的样式表现
<script setup lang="ts">
import { useDefaultVModel, useValidator } from '@casual-ui/vue'
const props = defineProps<{
modelValue: string
}>()
const emit = defineEmits<{
(e: 'update:modelValue', newValue: string): void
}>()
const innerValue = useDefaultVModel(props, emit)
const { validate, clearValidate, hasError } = useValidator()
</script>
<template>
<div class="custom-input" :class="[{ 'custom-input--has-error': hasError }]">
<input
v-model="innerValue"
@focus="clearValidate"
@blur="validate(innerValue)"
>
</div>
</template>
<style lang="scss" scoped>
.custom-input {
input {
outline: none;
border: 1px solid var(--casual-copywriting-normal);
}
&--has-error {
input {
color: var(--casual-warning);
border-color: var(--casual-warning);
}
}
}
</style>
提示
表单项的所有与表单整体同名的配置可以覆盖表单整体的配置
CForm API
Array<CFormItemConfig>
() => []
表单项配置
Record
() => ({})
表单绑定值,用于v-model
string
'100px'
表单项提示文案长度
number
6
每个表单项占用的列数
LabelDirection
'row'
文本排列方向,表现为flex-direction的对应值
"left"
| "center"
| "right"
'left'
文字对齐方式,表现为text-align的对应值
CSize
'md'
尺寸
CSize
'md'
表单项间隔尺寸
boolean
false
是否在验证中,可用于v-model:validating
绑定,在具有异步验证规则时可能会需要这个属性用作一些状态展示
CFormItem API
string
''
对应表单中的项的名称
string
''
文本提示
string
'100px'
文本提示宽度
number
6
表单项占用的列数,可覆盖表单整体的col属性,可用于为项定制列宽
CSize
'md'
尺寸
Array<CRule>
() => []
验证规则
LabelDirection
'row'
提示文字与表单项排列方向,可覆盖表单整体的label-direction属性
"left"
| "center"
| "right"
'left'
文字对齐方式,表现为text-align的对应值,可覆盖表单整体的label-align属性