uniapp表单校验超详细讲解
本文详解uniapp中uni-forms组件的表单校验机制。涵盖rules规则配置、model绑定、validate与setValue方法使用,以及同步/异步自定义校验函数的编写。重点解析动态表单的Array类型name处理与校验时机优先级,提供完整代码示例与API参考。
uni-forms表单校验
首先,uni-forms组件必须通过rules属性传入预定义的校验规则。
其次,uni-forms需要绑定model属性,该属性的值应为包含表单所有key/value的对象。
同时,每个uni-forms-item子组件必须设置name属性,其值对应当前字段的名称,类型支持String或Array。
对于内置组件或已支持v-model的第三方组件,只需正常绑定v-model即可,无需额外操作。
若使用原生checkbox或不支持v-model的第三方组件,只需给组件绑定binddata方法即可触发表单校验,无需在methods中单独绑定事件。
binddata('name',$event.detail.value,'form')方法接收三个参数。
第一个参数为当前表单组件所在的name,需与父组件uni-forms-item绑定的name属性值一致。
第二个参数为需要校验的值,内置组件可通过$event.detail.value获取返回值,自定义组件则需传入待校验的具体值。
第三个参数为uni-forms组件绑定的ref值,多表单场景下必须传入以区分不同表单;若页面仅有一个uni-forms,可忽略此参数。
若内置binddata方法无法满足需求,可在当前页面的methods中复写该方法。复写时需调用uni-forms的setValue方法来触发表单校验。
<template>
<view>
<uni-forms ref="form" :modelValue="formData" :rules="rules">
<uni-forms-item label="姓名" name="name">
<uni-easyinput type="text" v-model="formData.name" placeholder="请输入姓名" />
</uni-forms-item>
<uni-forms-item label="邮箱" name="email">
<input class="input" v-model="formData.email" type="text" placeholder="请输入用户名" @input="binddata('email',$event.detail.value)" />
</uni-forms-item>
</uni-forms>
<button @click="submit">Submit</button>
</view>
</template>
<script>
export default {
data() {
return {
// 表单数据
formData: {
name: 'LiMing',
email: 'dcloud@email.com'
},
rules: {
// 对name字段进行必填验证
name: {
rules: [{
required: true,
errorMessage: '请输入姓名',
},
{
minLength: 3,
maxLength: 5,
errorMessage: '姓名长度在 {minLength} 到 {maxLength} 个字符',
}
]
},
// 对email字段进行必填验证
email: {
rules: [{
format: 'email',
errorMessage: '请输入正确的邮箱地址',
}]
}
}
}
},
methods: {
/**
* 复写 binddata 方法,如果只是为了校验,无复杂自定义操作,可忽略此方法
* @param {String} name 字段名称
* @param {String} value 表单域的值
*/
// binddata(name,value){
// 通过 input 事件设置表单指定 name 的值
// this.$refs.form.setValue(name, value)
// },
// 触发提交表单
submit() {
this.$refs.form.validate().then(res=>{
console.log('表单数据信息:', res);
}).catch(err =>{
console.log('表单错误信息:', err);
})
}
}
}
</script>校验规则说明
校验规则接收一个Object类型的值,通过传入不同的规则配置来定义每个表单域值的校验逻辑。
该对象的key表示当前表单域的字段名,value则包含具体的校验规则配置。
以下为value字段所包含的具体内容说明。
属性名 | 类型 | 说明 |
rules | Array | 校验规则,下方rules属性说明 |
validateTrigger | String | 表单校验时机【1.4.0】已废弃 |
label | String | 当前表单域的字段中文名,多用于errMessage的显示,可以不填 |
rules: {
// 对name字段进行必填验证
name: {
// name 字段的校验规则
rules:[
// 校验 name 不能为空
{
required: true,
errorMessage: '请填写姓名',
},
// 对name字段进行长度验证
{
minLength: 3,
maxLength: 5,
errorMessage: '{label}长度在 {minLength} 到 {maxLength} 个字符',
}
],
// 当前表单域的字段中文名,可不填写
label:'姓名',
validateTrigger:'submit'
}
}rules属性说明
每个验证规则中可以配置多个属性,以下列举常见规则属性。
属性名 | 类型 | 默认值 | 可选值 | 说明 |
required | Boolean | - | - | 是否必填,配置此参数不会显示输入框左边的必填星号,如需要,请配置uni-forms-item组件的的required为true |
range | Array | - | - | 数组至少要有一个元素,且数组内的每一个元素都是唯一的。 |
format | String | - | - | 内置校验规则,如这些规则无法满足需求,可以使用正则匹配或者自定义规则 |
pattern | RegExp | - | - | 正则表达式,注意事项见下方说明 |
maximum | Number | - | - | 校验最大值(大于) |
minimum | Number | - | - | 校验最小值(小于) |
maxLength | Number | - | - | 校验数据最大长度 |
errorMessage | String | - | - | 校验失败提示信息语,可添加属性占位符,当前表格内属性都可用作占位符 |
validateFunction | Function | - | - | 自定义校验规则 |
format属性值说明
属性名 | 说明 |
string | 必须是 string 类型,默认类型 |
number | 必须是 number 类型 |
boolean | 必须是 boolean 类型 |
array | 必须是 array 类型 |
object | 必须是 object 类型 |
url | 必须是 url 类型 |
必须是 email 类型 |
validateFunction自定义校验规则使用说明
validateFunction方法返回四个参数:validateFunction:function(rule,value,data,callback){},参数名可由开发者自定义。
rule:当前校验字段在rules中所对应的校验规则对象。
value:当前校验字段的实际值。
data:所有校验字段的字段名和值的完整对象。
callback:校验完成时的回调函数。通常无需手动执行callback,直接返回true(校验通过)或false(校验失败)即可。若需显示不同的errMessage,校验不通过时执行callback('提示错误信息'),校验通过时执行callback()。
<template>
<view>
<uni-forms ref="form" :modelValue="formData">
<uni-forms-item label="兴趣爱好" required name="hobby">
<uni-data-checkbox v-model="formData.hobby" multiple :localdata="hobbys" />
</uni-forms-item>
</uni-forms>
<button class="button" @click="submit">校验表单</button>
</view>
</template>
<script>
export default {
data() {
return {
formData:{
},
rules: {
hobby: {
rules: [{
required: true,
errorMessage: '请选择兴趣',
},{
validateFunction:function(rule,value,data,callback){
if (value.length < 2) {
callback('请至少勾选两个兴趣爱好')
}
return true
}
}]
}
}
}
},
onReady() {
// 需要在onReady中设置规则
this.$refs.form.setRules(this.rules)
},
methods: {
submit(form) {
this.$refs.form.validate().then(res=>{
console.log('表单数据信息:', res);
}).catch(err =>{
console.log('表单错误信息:', err);
})
}
}
}
</script>validateFunction异步校验
上述自定义校验方式为同步校验。如需进行异步校验,validateFunction需返回一个Promise对象。校验不通过时执行reject(new Error('错误信息'))以返回错误信息,校验通过则直接执行resolve()。在异步校验方法中,无需使用callback。
<template>
<view>
<uni-forms :modelValue="formData" ref="form">
<uni-forms-item name="age" label="年龄">
<uni-easyinput v-model="formData.age" type="text" placeholder="请输入年龄" />
</uni-forms-item>
</uni-forms>
<button class="button" @click="submit">校验表单</button>
</view>
</template>
<script>
export default {
data() {
return {
formData:{
age:''
},
rules: {
age: {
rules: [{
required: true,
errorMessage: '请输入年龄',
},{
validateFunction: (rule, value, data, callback) => {
// 异步需要返回 Promise 对象
return new Promise((resolve, reject) => {
setTimeout(() => {
if (value > 10 ) {
// 通过返回 resolve
resolve()
} else {
// 不通过返回 reject(new Error('错误信息'))
reject(new Error('年龄必须大于十岁'))
}
}, 2000)
})
}
}]
}
}
}
},
onReady() {
// 需要在onReady中设置规则
this.$refs.form.setRules(this.rules)
},
methods: {
/**
* 表单提交
* @param {Object} event
*/
submit() {
uni.showLoading()
this.$refs.form.validate().then(res => {
uni.hideLoading()
console.log('表单数据信息:', res);
}).catch(err => {
uni.hideLoading()
console.log('表单错误信息:', err);
})
}
}
}
</script>动态表单校验
动态表单校验多用于同一个字段需要添加多次的场景,例如需要动态创建多个域名参与检验。
- 在formData中定义一个变量用来接受同一个字段的多个结果。
dynamicFormData: { email: '', // domains 字段下会有多个结果 domains: [] } - 使用uni-forms-item的rules属性定义单个表单域的校验规则。
<uni-forms-item :label="item.label+' '+index" required :rules="[{'required': true,errorMessage: '域名项必填'}]" :key="item.id"> ... </uni-forms-item> - name需要动态指定,动态表单推荐使用Array类型,内容从左到右为绑定值的调用链。['domains',index,'value']等同于dynamicFormData.domains[index].value。
<uni-forms-item required :label="item.label+' '+index" :name="['domains',index,'value']" :rules="[{'required': true,errorMessage: '域名项必填'}]" :key="item.id" > ... </uni-forms-item> - 需要绑定值的组件的v-model也需要动态指定为dynamicFormData.domains[index].value。
<uni-forms-item required :label="item.label+' '+index" :name="['domains',index,'value']" :rules="[{'required': true,errorMessage: '域名项必填'}]" :key="item.id" > <uni-easyinput v-model="dynamicFormData.domains[index].value" placeholder="请输入域名" /> </uni-forms-item>完整实例
<uni-forms ref="dynamicForm" :rules="dynamicRules" :model="dynamicFormData"> <uni-forms-item label="邮箱" required name="email"> <uni-easyinput v-model="dynamicFormData.email" placeholder="请输入姓名" /> </uni-forms-item> <template v-for="(item,index) in dynamicFormData.domains"> <uni-forms-item :label="item.label+' '+index" required :rules="[{'required': true,errorMessage: '域名项必填'}]" :key="item.id" :name="['domains',index,'value']"> <view class="form-item"> <uni-easyinput v-model="dynamicFormData.domains[index].value" placeholder="请输入域名" /> <button class="button" size="mini" type="default" @click="del(item.id)">删除</button> </view> </uni-forms-item> </template> </uni-forms> <view class="button-group"> <button type="primary" size="mini" @click="add">新增域名</button> <button type="primary" size="mini" @click="submit('dynamicForm')">提交</button> </view> <script> export default { data() { return { // 数据源 dynamicFormData: { email: '', domains: [] }, // 规则 dynamicRules: { email: { rules: [{ required: true, errorMessage: '域名不能为空' }, { format: 'email', errorMessage: '域名格式错误' }] } } } }, methods: { // 新增表单域 add() { this.dynamicFormData.domains.push({ label: '域名', value:'', id: Date.now() }) }, // 删除表单域 del(id) { let index = this.dynamicLists.findIndex(v => v.id === id) this.dynamicLists.splice(index, 1) }, // 提交 submit(ref) { this.$refs[ref].validate((err,value)=>{ console.log(err,value); }) }, } } </script>表单校验时机说明
若需对子表单进行单独校验,可使用uni-forms-item的rules属性配合onFieldChange方法。
<template> <view> <uni-forms ref="form" :modelValue="formData" validate-trigger="bind"> <uni-forms-item name="age" label="年龄"> <!-- uni-easyinput 的校验时机是数据发生变化, 即触发 input 时 --> <uni-easyinput v-model="formData.age" type="text" placeholder="请输入年龄" /> </uni-forms-item> <uni-forms-item ref="input" name="email" label="邮箱"> <!-- input 的校验时机 --> <input v-model="formData.email" @blur="(e)=>$refs.input.onFieldChange($event.detail.value)" /> </uni-forms-item> <button class="button" @click="submit">校验表单</button> </uni-forms> </view> </template>【1.4.0后此规则已不生效】对于表单校验时机,同时只会有一个validateTrigger发生作用,其作用权重为。
规则 > uni-forms-item > uni-forms
如果规则里配置了validateTrigger,则优先使用规则里的validateTrigger属性来决定表单校验时机。
如果规则里没有配置validateTrigger,则优先使用uni-forms-item的validateTrigger属性来决定表单校验时机。
如果uni-forms-item组件里没有配置validateTrigger,则优先使用uni-forms的validateTrigger属性来决定表单校验时机。
以此类推,如果都没有使用validateTrigger属性,则会使用uni-forms的validateTrigger属性默认值来决定表单校验时机。
API
Forms Props
属性名
类型
默认值
可选值
说明
兼容说明
model
Object
-
-
表单数据
1.4.0 新增
rules
Object
-
-
表单校验规则
validateTrigger
String
submit
bind/submit/blur
表单校验时机,blur仅在 uni-easyinput 中生效
1.4.0 新增 blur 值
label-position
String
left
top/left
label 位置
label-width
String/Number
75
-
label 宽度,单位 px
label-align
String
left
left/center/right
label 居中方式
err-show-type
String
undertext
undertext/toast/modal
表单错误信息提示方式
border
Boolean
false
-
是否显示分格线
value
Object
-
-
表单数据,兼容vue2
即将弃用,请使用 model 代替
modelValue
Object
-
-
表单数据,兼容vue3
即将弃用,请使用 model 代替
Forms Events
事件称名
说明
@validate
任意表单项被校验后触发,返回表单校验信息
Forms Methods
方法称名
说明
兼容说明
setRules
动态设置表单规则
validate
对整个表单进行校验的方法,会返回一个 promise
validateField
部分表单进行校验
clearValidate
移除表单的校验结果
submit
对整个表单进行校验的方法,会返回一个 promise
即将弃用,请使用validate代替
setValue
设置表单某一项 name 的对应值,通常在 uni-forms-item 和自定表单组件中使用
即将弃用,请使用 onFieldChange 兼容相关功能
resetFields
重置表单, 需要把uni-forms的modelValue属性改为v-model,且对内置组件可能不生效
1.4.0 已弃用
validate(keepItem:Array,callback:Function)方法说明
validate方法用于对整个表单进行校验,该方法接收两个参数。
参数称名
类型
说明
keepItem
Array
保留不参与校验的字段
callback
Function
校验完成返回函数
校验成功后,校验对象只保留指定了name的字段(只要uni-forms-item绑定了name,即使不校验也会返回)。如需保留其他字段,则需使用keepItem属性。
<template> <view> <uni-forms ref="form" :modelValue="formData"> <uni-forms-item name="age" label="年龄"> <uni-easyinput v-model="formData.age" type="text" placeholder="请输入年龄" /> </uni-forms-item> <button class="button" @click="submit">校验表单</button> </uni-forms> </view> </template> <script> export default { data() { return { formData:{ age:'' }, rules: { // ... } } }, onLoad(){ this.formData.id = 'testId' }, methods: { submit() { // 在 onLoad 生命周期中,formData添加了一个 id 字段 ,此时这个字段是不参数校验的,所以结果中不返回 // 在 validate(['id']) 方法中,指定第一个参数 ,即可返回id字段 this.$refs.form.validate(['id'],(err,formData)=>{ if(!err){ console.log('success',formData) } }) } } } </script>validate方法还可以返回一个Promise对象。如果使用了callback,则Promise返回null,validate方法会优先使用callback。
callback方法会返回两个返回值。
第一个返回值为检验结果,如果校验失败,则返回失败信息;如果成功,返回null。
第二个返回值为校验数据。
// 使用 callback // 如果不需要 keepItem 参数 ,则可以省略 this.$refs.form.validate((err,formData)=>{ // 如果校验成功 ,err 返回 null if(!err){ console.log('success',formData) return } console.log('error',err) }).then(res=>{ // res 返回 null }) // 使用 Promise // 对整个表单进行校验,返回一个 Promise this.$refs.form.validate().then((res)=>{ // 成功返回,res 为表单数据 // 其他逻辑处理 // ... }).catch((err)=>{ // 表单校验验失败,err 为具体错误信息 // 其他逻辑处理 // ... })setValue(name:String,value:any)方法说明
setValue方法通常用于内置组件或第三方组件返回值的校验。由于uni-easyinput等uni开头的组件内置了对uni-forms的支持,这些组件返回的值可直接使用。但对于input等内置组件,其值的变化无法及时通知uni-forms,从而无法正常校验,此时需手动将这些值加入uni-forms的校验流程。
setValue方法接受两个参数。
name:表单域对应的name。
value:表单域对应的值。
<template> <view> <uni-forms ref="form" :modelValue="formData"> <uni-forms-item name="age" label="年龄"> <input v-model="formData.age" @input="setValue('age',formData.age)"> </uni-forms-item> <button class="button" @click="submit">校验表单</button> </uni-forms> </view> </template> <script> export default { data() { return { formData:{ age:'' }, rules: { // ... } } }, methods: { setValue(name,value){ // 设置表单某项对应得值来触发表单校验 // 接受两个参数,第一个参数为表单域的 name ,第二个参数为表单域的值 this.$refs.form.setValue(name,value) }, submit() { this.$refs.form.validate(['id'],(err,formData)=>{ if(!err){ console.log('success',formData) } }) } } } </script>其他方法说明
// 设置规则 this.$refs.form.setRules({ //... }) // 部分表单进行校验,接受一个参数,类型为 String 或 Array ,只校验传入 name 表单域的值 this.$refs.form.validateField(['name', 'email']).then((res)=>{ // 成功返回,res 为对应表单数据 // 其他逻辑处理 // ... }).catch((err)=>{ // 表单校验验失败,err 为具体错误信息 // 其他逻辑处理 // ... }) // 移除表单校验,接受一个参数,类型为 String 或 Array ,只移除传入 name 表单域的值,如果不传入参数,则移除所有 this.$refs.form.clearValidate(['name', 'email'])FormsItem Props
属性名
类型
默认值
可选值
说明
兼容说明
name
String/Array
-
-
表单域的属性名,在使用校验规则时必填
rules
Object
-
-
表单校验规则
required
Boolean
false
-
label 右边显示红色"*"号,样式显示不会对校验规则产生效果
label
String
-
-
输入框左边的文字提示
label-width
Number
70
-
label的宽度,单位px
error-message
String
-
-
显示的错误提示内容,如果为空字符串或者false,则不显示错误信息
label-align
String
left
left/center/right
label的文字对齐方式
label-position
String
left
top/left
label的文字的位置
1.4.0已弃用 ,统一使用 uni-forms 的对齐方式
validateTrigger
String
submit
bind/submit
表单校验时机
1.4.0已弃用,统一使用 uni-forms 的校验时机
left-icon
String
-
-
label左边的图标,限uni-ui的图标名称
1.4.0已弃用 ,请使用 #label 插槽实现相关功能
icon-color
String
#606266
-
左边通过icon配置的图标的颜色
1.4.0已弃用 ,请使用 #label 插槽实现相关功
FormsItem Methods
方法称名
说明
兼容说明
setRules
动态设置表单规则
onFieldChange
校验子表单
1.4.0新增
FormsItem Slots
插槽名
说明
default
默认插槽
label
label插槽,自定义label显示内容
示例
<template> <view class="container"> <uni-card :is-shadow="false" is-full> <text class="uni-h6">uni-forms 组件一般由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。</text> </uni-card> <uni-section title="基本用法" type="line"> <view class="example"> <!-- 基础用法,不包含校验规则 --> <uni-forms ref="baseForm" :modelValue="baseFormData"> <uni-forms-item label="姓名" required> <uni-easyinput v-model="baseFormData.name" placeholder="请输入姓名" /> </uni-forms-item> <uni-forms-item label="年龄" required> <uni-easyinput v-model="baseFormData.age" placeholder="请输入年龄" /> </uni-forms-item> <uni-forms-item label="性别" required> <uni-data-checkbox v-model="baseFormData.sex" :localdata="sexs" /> </uni-forms-item> <uni-forms-item label="兴趣爱好" required> <uni-data-checkbox v-model="baseFormData.hobby" multiple :localdata="hobbys" /> </uni-forms-item> <uni-forms-item label="自我介绍"> <uni-easyinput type="textarea" v-model="baseFormData.introduction" placeholder="请输入自我介绍" /> </uni-forms-item> <uni-forms-item label="日期时间"> <uni-datetime-picker type="datetime" return-type="timestamp" v-model="baseFormData.datetimesingle"/> </uni-forms-item> </uni-forms> </view> </uni-section> <uni-section title="对齐方式" type="line"> <view class="example"> <view class="segmented-control"> <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem" styleType="button"> </uni-segmented-control> </view> <!-- 展示不同的排列方式 --> <uni-forms ref="baseForm" :modelValue="alignmentFormData" :label-position="alignment"> <uni-forms-item label="姓名" required> <uni-easyinput v-model="baseFormData.name" placeholder="请输入姓名" /> </uni-forms-item> <uni-forms-item label="年龄" required> <uni-easyinput v-model="baseFormData.age" placeholder="请输入年龄" /> </uni-forms-item> </uni-forms> </view> </uni-section> <uni-section title="表单校验" type="line"> <view class="example"> <!-- 基础表单校验 --> <uni-forms ref="valiForm" :rules="rules" :modelValue="valiFormData"> <uni-forms-item label="姓名" required name="name"> <uni-easyinput v-model="valiFormData.name" placeholder="请输入姓名" /> </uni-forms-item> <uni-forms-item label="年龄" required name="age"> <uni-easyinput v-model="valiFormData.age" placeholder="请输入年龄" /> </uni-forms-item> <uni-forms-item label="自我介绍" name="introduction"> <uni-easyinput type="textarea" v-model="valiFormData.introduction" placeholder="请输入自我介绍" /> </uni-forms-item> </uni-forms> <button type="primary" @click="submit('valiForm')">提交</button> </view> </uni-section> <uni-section title="自定义校验规则" type="line"> <view class="example"> <!-- 自定义表单校验 --> <uni-forms ref="customForm" :rules="customRules" :modelValue="customFormData"> <uni-forms-item label="姓名" required name="name"> <uni-easyinput v-model="customFormData.name" placeholder="请输入姓名" /> </uni-forms-item> <uni-forms-item label="年龄" required name="age"> <uni-easyinput v-model="customFormData.age" placeholder="请输入年龄" /> </uni-forms-item> <uni-forms-item label="兴趣爱好" required name="hobby"> <uni-data-checkbox v-model="customFormData.hobby" multiple :localdata="hobbys" /> </uni-forms-item> </uni-forms> <button type="primary" @click="submit('customForm')">提交</button> </view> </uni-section> <uni-section title="动态表单" type="line"> <view class="example"> <!-- 动态表单校验 --> <uni-forms ref="dynamicForm" :rules="dynamicRules" :modelValue="dynamicFormData"> <uni-forms-item label="邮箱" required name="email"> <uni-easyinput v-model="dynamicFormData.email" placeholder="请输入姓名" /> </uni-forms-item> <uni-forms-item v-for="(item,index) in dynamicLists" :key="item.id" :label="item.label+' '+index" required :rules="item.rules" :name="'domains[' + item.id + ']'"> <view class="form-item"> <uni-easyinput v-model="dynamicFormData.domains[item.id]" placeholder="请输入域名" /> <button class="button" size="mini" type="default" @click="del(item.id)">删除</button> </view> </uni-forms-item> </uni-forms> <view class="button-group"> <button type="primary" size="mini" @click="add">新增域名</button> <button type="primary" size="mini" @click="submit('dynamicForm')">提交</button> </view> </view> </uni-section> </view> </template> <script> export default { data() { return { // 基础表单数据 baseFormData: { name: '', age: '', introduction: '', sex: 2, hobby: [5], datetimesingle: 1627529992399 }, // 表单数据 alignmentFormData: { name: '', age: '', }, // 单选数据源 sexs: [{ text: '男', value: 0 }, { text: '女', value: 1 }, { text: '保密', value: 2 }], // 多选数据源 hobbys: [{ text: '跑步', value: 0 }, { text: '游泳', value: 1 }, { text: '绘画', value: 2 }, { text: '足球', value: 3 }, { text: '篮球', value: 4 }, { text: '其他', value: 5 }], // 分段器数据 current: 0, items: ['左对齐', '顶部对齐'], // 校验表单数据 valiFormData: { name: '', age: '', introduction: '', }, // 校验规则 rules: { name: { rules: [{ required: true, errorMessage: '姓名不能为空' }] }, age: { rules: [{ required: true, errorMessage: '年龄不能为空' }, { format: 'number', errorMessage: '年龄只能输入数字' }] } }, // 自定义表单数据 customFormData: { name: '', age: '', hobby: [] }, // 自定义表单校验规则 customRules: { name: { rules: [{ required: true, errorMessage: '姓名不能为空' }] }, age: { rules: [{ required: true, errorMessage: '年龄不能为空' }] }, hobby: { rules: [{ format: 'array' }, { validateFunction: function(rule, value, data, callback) { if (value.length < 2) { callback('请至少勾选两个兴趣爱好') } return true } } ] } }, dynamicFormData: { email: '', domains: {} }, dynamicLists: [], dynamicRules: { email: { rules: [{ required: true, errorMessage: '域名不能为空' }, { format: 'email', errorMessage: '域名格式错误' }] } } } }, computed: { // 处理表单排列切换 alignment() { if (this.current === 0) return 'left' if (this.current === 1) return 'top' return 'left' } }, onLoad() {}, onReady() { // 设置自定义表单校验规则,必须在节点渲染完毕后执行 this.$refs.customForm.setRules(this.customRules) }, methods: { onClickItem(e) { console.log(e); this.current = e.currentIndex }, add() { this.dynamicLists.push({ label: '域名', rules: [{ 'required': true, errorMessage: '域名项必填' }], id: Date.now() }) }, del(id) { let index = this.dynamicLists.findIndex(v => v.id === id) this.dynamicLists.splice(index, 1) }, submit(ref) { this.$refs[ref].validate().then(res => { console.log('success', res); uni.showToast({ title: `校验通过` }) }).catch(err => { console.log('err', err); }) }, } } </script> <style lang="scss"> .example { padding: 15px; background-color: #fff; } .segmented-control { margin-bottom: 15px; } .button-group { margin-top: 15px; display: flex; justify-content: space-around; } .form-item { display: flex; align-items: center; } .button { display: flex; align-items: center; height: 35px; margin-left: 10px; } </style>
总结
到此这篇关于uniapp表单校验的文章就介绍到这了,更多相关uniapp表单校验内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
JS空字符串、null和undefined转数字的结果是什么
2026-11-05 14:49:16
CodePen、JSFiddle与StackBlitz:主流JS在线编辑器对比
2026-11-05 13:38:29
JS怎么将时间戳转换为“刚刚”、“几分钟前”等相对时间
2026-11-05 12:55:14
JavaScript将儒略日逆向还原为公历日期时间的实现方法
2026-11-04 23:51:05
能在我的世界手机版直接修改JS代码吗
2026-11-04 19:02:53
