uniapp中的uview组件库丰富的Form 表单用法

目录

基本使用

#Form-item组件说明

#验证规则

#验证规则属性

#uView自带验证规则

#综合实战

#校验错误提示方式

#校验


基本使用

此组件一般是用于表单验证使用,每一个表单域由一个u-form-item组成,表单域中可以放置u-inputu-checkboxu-radiou-switch等。

  • 在表单组中,通过model参数绑定一个对象,这个对象的属性为各个u-form-item内组件的对应变量。
  • 由于表单验证和绑定表单规则时,需要通过ref操作,故这里需要给form组件声明ref="uForm"属性。
  • 关于u-from-item内其他可能包含的诸如inputradio等组件,请见各自组件的相关文档说明。
<template><view><!-- 注意,如果需要兼容微信小程序,最好通过setRules方法设置rules规则 --><u--formlabelPosition="left":model="model1":rules="rules"ref="uForm"><u-form-itemlabel="姓名"prop="userInfo.name"borderBottomref="item1"><u--inputv-model="model1.userInfo.name"border="none"></u--input></u-form-item><u-form-itemlabel="性别"prop="userInfo.sex"borderBottom@click="showSex = true; hideKeyboard()"ref="item1"><u--inputv-model="model1.userInfo.sex"disableddisabledColor="#ffffff"placeholder="请选择性别"border="none"></u--input><u-iconslot="right"name="arrow-right"></u-icon></u-form-item></u--form><u-action-sheet:show="showSex":actions="actions"title="请选择性别"description="如果选择保密会报错"@close="showSex = false"@select="sexSelect"></u-action-sheet></view>
</template><script>
export default {data() {return {showSex: false,model1: {userInfo: {name: 'uView UI',sex: '',},},actions: [{name: '男',},{name: '女',},{name: '保密',},],rules: {'userInfo.name': {type: 'string',required: true,message: '请填写姓名',trigger: ['blur', 'change']},'userInfo.sex': {type: 'string',max: 1,required: true,message: '请选择男或女',trigger: ['blur', 'change']},},radio: '',switchVal: false};},methods: {sexSelect(e) {this.model1.userInfo.sex = e.namethis.$refs.uForm.validateField('userInfo.sex')},},onReady() {//如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。this.$refs.uForm.setRules(this.rules)},
};
</script>

从上面的示例我们可以看到,rules中的属性名和form的属性名是一致的,同时传递给u-form-itemprop参数绑定的也是相同的属性名,注意这里prop参数绑定的是 字符串(属性名),而不是一个变量。

#Form-item组件说明

此组件一般需要搭配Form组件使用,也可以单独搭配Input等组件使用,由于此组件参数较多,这里只对其中参数最简要介绍,其余请见底部的API说明:

  • prop为传入Form组件的model中的属性字段,如果需要表单验证,此属性是必填的。
  • labelPosition可以配置左侧"label"的对齐方式,可选为lefttop
  • borderBottom是否显示表单域的下划线,如果给Input组件配置了边框,可以将此属性设置为false,从而隐藏默认的下划线。
  • 如果想在表单域配置左右的图标或小图片,可以通过leftIconrightIcon参数实现。
#验证规则

组件验证部分采用了async-validator (opens new window),一个字段可以设置多个内置规则,以及自定义规则,触发方式等, 每个字段的验证规则为一个数组,数组的每一个元素对象为其中一条规则(一个字段的验证可以配置多个规则),如下:

rules: {'userInfo.name': {type: 'string',required: true,message: '请填写姓名',trigger: ['blur', 'change']},code: {type: 'string',required: true,len: 4,message: '请填写4位验证码',trigger: ['blur']},'userInfo.sex': {type: 'string',max: 1,required: true,message: '请选择男或女',trigger: ['blur', 'change']},radiovalue1: {type: 'string',min: 1,max: 2,message: '生命是美好的,请不要放弃治疗',trigger: ['change']},checkboxValue1: {type: 'array',min: 2,required: true,message: '不能太宅,至少选两项',trigger: ['change']},intro: {type: 'string',min: 3,required: true,message: '不低于3个字',trigger: ['change']},hotel: {type: 'string',min: 2,required: true,message: '请选择住店时间',trigger: ['change']},'userInfo.birthday': {type: 'string',required: true,message: '请选择生日',trigger: ['change']},
},
#验证规则属性

每一个验证规则中,可以配置多个属性,下面对常用的属性进行讲解,更具体的可以查看async-validator (opens new window)的文档说明:

  • trigger{String | Array}:触发校验的方式有2种:

    • change:字段值发生变化时校验
    • blur:输入框失去焦点时触发
    • 如果同时监听两种方式,需要写成数组形式:['change', 'blur']
  • type{String}
    内置校验规则,如这些规则无法满足需求,可以使用正则匹配、或者使用validator自定义方法并结合uView自带验证规则。

    • string:必须是 string 类型,默认类型
    • number:必须是 number 类型
    • boolean:必须是 boolean 类型
    • method:必须是 function 类型
    • regexp:必须是 regexp 类型,这里的正则,指的是判断字段的内容是否一个正则表达式,而不是用这个正则去匹配字段值
    • integer:必须是整数类型
    • float:必须是浮点数类型
    • array:必须是 array 类型
    • object:必须是 object 类型
    • enum:必须出现在 enmu 指定的值中
    • date:必须是 date 类型
    • url:必须是 url 类型
    • hex:必须是 16 进制类型
    • email:必须是 email 类型
    • any:任意类型
  • required
    布尔值,是否必填,配置此参数不会显示输入框左边的必填星号,如需要,请配置u-form-itemrequiredtrue,注意:如需在swiper标签内显示星号,需要给予swiper-item第一个根节点一定的margin样式

  • pattern
    要求此参数值为一个正则表达式,如: /\d+/,不能带引号,如:"/\d+/",组件会对字段进行正则判断,返回结果。

  • min
    最小值,如果字段类型为字符串和数组,会取字符串长度与数组长度(length)与min比较,如果字段是数值,则直接与min比较。

  • max
    最大值,规则同min参数

  • len
    指定长度,规则同min,优先级高于minmax

  • enum{Array} 指定的值,配合 type: 'enum' 使用

  • whitespace{Boolean}
    如果字段值内容都为空格,默认无法通过required: true校验,如果要允许通过,需要将此参数设置为true

  • transform{Function},校验前对值进行转换,函数的参数为当前值,返回值为改变后的值,参数如如下:

    • value:当前校验字段的值
  • message
    校验不通过时的提示信息

  • validator{Function}:自定义同步校验函数,参数如下:

    • rule:当前校验字段在 rules 中所对应的校验规则
    • value:当前校验字段的值
    • callback:校验完成时的回调,一般无需执行callback,返回true(校验通过)或者false(校验失败)即可
  • asyncValidator{Function}:自定义异步校验函数,参数如下:

    • rule:当前校验字段在 rules 中所对应的校验规则
    • value:当前校验字段的值
    • callback:校验完成时的回调,执行完异步操作(比如向后端请求数据验证),如果不通过,需要callback(new Error('提示错误信息')),如果校验通过,执行callback()即可
#uView自带验证规则

uView在JS板块的Test 规则校验中有大量内置的验证规则,这些规则对表单验证来说,属于自定义规则,故需要用到上方规则属性的 validator自定义验证函数,这里做一个详细说明。

我们知道uView有自带的判断手机号的验证方法uni.$u.test.mobile(value),但是async-validator (opens new window)没有 内置判断手机号的规则,所以将二者结合使用:

rules: {// 字段名称mobile: [{required: true, message: '请输入手机号',trigger: ['change','blur'],},{// 自定义验证函数,见上说明validator: (rule, value, callback) => {// 上面有说,返回true表示校验通过,返回false表示不通过// uni.$u.test.mobile()就是返回true或者false的return uni.$u.test.mobile(value);},message: '手机号码不正确',// 触发器可以同时用blur和changetrigger: ['change','blur'],}]
}
#综合实战

上面讲述了async-validator (opens new window)的规则和配置,以及uView内置规则的结合使用,下面我们进行一个综合 实战示例,要入对某一个字段进行如下验证(验证实现有多种方法,下方仅为引导示例,非唯一,或最优做法):

  1. 必填,同时可接受changeblur触发校验:配置required参数为true,同时配置trigger[change, blur]
  2. 必须为字母或字符串,校验前先将字段值转为字符串类型:通过pattern参数配置正则:/^[0-9a-zA-Z]*$/g,通过transform参数在校验前对字段值转换为字符串
  3. 长度6-8个字符之间:通过 配置min为6,max为8
  4. 需要包含字母"A":使用uView的uni.$u.test.contains()方法,并结合validator自定义函数实现
  5. 异步校验,输入完账号,输入框失去焦点时,向后端请求该账号是否已存在:通过上方的asyncValidator异步函数进行验证。

综上,我们可以得出如下的一个配置规则(仅为综合演示,非最优做法):

rules: {name: [// 必填规则{required: true,message: '此为必填字段',// blur和change事件触发检验trigger: ['blur', 'change'],},// 正则判断为字母或数字{pattern: /^[0-9a-zA-Z]*$/g,// 正则检验前先将值转为字符串transform(value) {return String(value);},message: '只能包含字母或数字'},// 6-8个字符之间的判断{min: 6,max: 8,message: '长度在6-8个字符之间'},// 自定义规则判断是否包含字母"A"{validator: (rule, value, callback) => {return uni.$u.test.contains(value, "A");},message: '必须包含字母"A"'},// 校验用户是否已存在{asyncValidator: (rule, value, callback) => {uni.$u.http.post('/xxx/xxx', {name: value}).then(res => {// 如果验证不通过,需要在callback()抛出new Error('错误提示信息')if(res.error) {callback(new Error('姓名重复'));} else {// 如果校验通过,也要执行callback()回调callback();}})},// 如果是异步校验,无需写message属性,错误的信息通过Error抛出即可// message: 'xxx'}]
}
#校验错误提示方式

uView提供了多种校验的错误提示方式,传递给Form组件的errorType参数:

  • message:默认为输入框下方用文字进行提示
  • none:不会进行任何提示
  • border-bottom:配置作用域底部的下划线显示为红色,要求给form-item设置了borderBottom=true才有效
  • toast:以"toast"提示的方式弹出错误信息,每次只弹出最前面的那个表单域的错误信息
<template><u--form :errorType="errorType">......</u--form>
</template><script>
export default {data() {return {// 文字提示errorType: 'message',// 不提示// errorType: 'none',// 下划线提示,要求给form-item设置了borderBottom=true才有效// errorType: 'border-bottom'};}
};
</script>
#校验

进行了上方的配置和讲解后,进入到最后一步,执行验证:
需要通过ref调用Form组件的validate方法,该方法回调函数的参数为一个布尔值,true为校验通过,否则反之。

<template><view class=""><u--form :model="form" ref="uForm"><u-form-item label="姓名" prop="name"><u-input v-model="form.name" /></u-form-item></u--form><u-button @click="submit">提交</u-button></view>
</template><script>
export default {data() {return {form: {name: '',},rules: {name: [{required: true,message: '请输入姓名',trigger: ['blur', 'change']}]}};},methods: {submit() {this.$refs.uForm.validate().then(res => {uni.$u.toast('校验通过')}).catch(errors => {uni.$u.toast('校验失败')})}},
};
</script>

API

#Form Props

参数说明类型默认值可选值
model表单数据对象Object--
rules通过ref设置,如果rules中有自定义方法等,需要使用setRules方法设置规则,见上方说明Object|Function|Array--
errorType错误的提示方式,见上方说明Stringmessagenone|toast|border-bottom|none
borderBottom是否显示表单域的下划线边框Booleantrue-
labelPosition表单域提示文字的位置,left-左侧,top-上方Stringlefttop
labelWidth提示文字的宽度,单位pxString | Number45数值 / auto
labelAlignlable字体的对齐方式Stringleftcenter / right
labelStylelable的样式,对象形式Object--

#Form Methods

此方法如要通过ref手动调用

名称说明参数
validate对整个表单进行校验的方法-
setRules如果rules中有自定义方法等,需要用此方法设置rules规则,否则微信小程序无效Function(rules)
validateField对部分表单字段进行校验Function(value, Function(errorsRes))
resetFields对整个表单进行重置,将所有字段值重置为初始值并移除校验结果-
clearValidate清空校验结果Function(props)

#Form-item Props

参数说明类型默认值可选值
label左侧提示文字String--
prop表单域model对象的属性名,在使用 validate、resetFields 方法的情况下,该属性是必填的String--
borderBottom是否显示下边框,如不需要下边框,需同时将u-form的同名参数设置为falseString | Booleantruetrue / false
labelWidth提示文字的宽度,单位rpx,如设置,将覆盖u-form的同名参数String | Number--
labelPosition 2.0.34label的位置String-left / top
rightIcon右侧自定义字体图标(限uView内置图标)或图片地址String--
leftIcon左侧自定义字体图标(限uView内置图标)或图片地址String--
leftIconStyle左侧自定义字体图标的样式String | Object--
required是否显示左边的"*"号,这里仅起展示作用,如需校验必填,请通过rules配置必填规则,如需在swiper标签内显示星号,需要给予swiper-item内第一个根节点一定的margin样式Booleanfalsetrue

#Form-item Slot

名称说明
-Form Item 的内容
right右侧自定义内容,可以在此传入一个按钮,用于获取验证码等场景

#Form-item Events

事件名说明回调参数版本
click点击时触发--

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

typescript 类装饰器的执行顺序

分类&#xff1a; class 类装饰器method 方法装饰器gettersetterfield 属性装饰器accessor 存取器装饰器 装饰器的执行分为两个阶段。 &#xff08;1&#xff09;评估&#xff08;evaluation&#xff09;&#xff1a;计算符号后面的表达式的值&#xff0c;得到的应该是函数。…

伺服电机:原点复位

一、原点复位概念 原点复位指的是&#xff0c;在驱动器使能时&#xff0c;触发原点复位功能后&#xff0c;电机将主动查找零点&#xff0c;完成定位功能。 那么问题来了&#xff0c;什么是原点&#xff0c;什么是零点&#xff1f; 原点&#xff1a;即机械原点&#xff0c;可…

人机对话:2024年有什么新机遇?

人机对话&#xff1a;2024年有什么新机遇&#xff1f; 2024年有什么新机遇&#xff1f;对于这个问题&#xff0c;我咨询了几个人工智能平台&#xff0c;得出一些不同的结果。 INSCODE AI 创作助手 2024年有许多新的机遇可以追逐。以下列出了一些可能的新机遇&#xff1a; 科…

四、Mysql数据库编程[触发器、存储过程、函数]

一、数据库编程 1.触发器 解释&#xff1a;触发器&#xff08;trigger&#xff09;能够在sql里面自动执行&#xff0c;当设定好某个条件&#xff0c;当条件满足时&#xff0c;sql将自动执行某些语句 &#xff0c;其中触发器里面有关键字NEW和OLD代表修改前和修改后的值 -- 创…

基于JAVA的独居老人物资配送系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4.2 新增物资4.3 查询物资4.4 查询物资配送4.5 新增物资配送 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的独居老人物资配送系统&#xff0c;包含了社区档案、…

【sql】_![CDATA[]]_和转义字符:

文章目录 一、转义字符二、<![CDATA[]]>三、<![CDATA[]]>和xml转移字符的关系&#xff0c;它们两个看起来是不是感觉功能重复了&#xff1f; 所有 XML 文档中的文本均会被解析器解析。 只有 CDATA 区段&#xff08;CDATA section&#xff09;中的文本会被解析器忽略…

RK3399平台入门到精通系列讲解(导读篇)21天挑战Linux系统开发

🚀返回总目录 文章目录 一、关于作者1、博主的联系方式2、支持二、需要具备的知识和工具1、需掌握知识点2、需了解的知识点三、通过系列博客可以学到什么1、本系列博文特色2、21天学习目标3、21天学习内容4、学习时间5、学习产出

操作系统——文件系统

分区 C盘、D盘等都是同一块硬盘上的不同分区。每个分区被操作系统视为独立的逻辑磁盘&#xff0c;它们可以有不同的文件系统、格式以及分配的存储空间。 卷 拥有文件系统的分区就叫做卷。 挂载&#xff08;mount&#xff09; 建立操作系统的逻辑地址和物理介质的物理地址之…

【解决问题】pyinstaller打包python应用进行快速分发

pyinstaller打包python应用进行快速分发 问题起因先利其器再善其事试用运行 问题起因 有同学问我要接口的应用&#xff0c;于是试了一下python打包成exe的过程。 先利其器 主要使用pyinstaller&#xff0c;可以通过pip安装 pip install pyinstaller安装过程如图 再善其事…

B+树的插入删除

操作 插入 case2的原理,非叶子节点永远和最右边的最左边的节点的值相等。 case3:的基本原理 非叶子节点都是索引节点 底层的数据分裂之后 相当于向上方插入一个新的索引(你可以认为非叶子节点都是索引),反正第二层插入160 都要分裂,然后也需要再插入(因为索引部分不需要重…

2023-12-27 LeetCode每日一题(保龄球游戏的获胜者)

2023-12-27每日一题 一、题目编号 2660. 保龄球游戏的获胜者二、题目链接 点击跳转到题目位置 三、题目描述 给你两个下标从 0 开始的整数数组 player1 和 player2 &#xff0c;分别表示玩家 1 和玩家 2 击中的瓶数。 保龄球比赛由 n 轮组成&#xff0c;每轮的瓶数恰好为…

数据分析工具 Top 8

你能想象一个没有工具箱的水管工吗? 没有,对吧? 数据从业者也是如此。如果没有他们的数据分析工具&#xff0c;数据从业者就无法分析数据、可视化数据、从数据中提取价值&#xff0c;也无法做数据从业者在日常工作中做的许多很酷的事情。 根据你最感兴趣的数据科学职业——数…

前后台分离开发

前后台分离开发 简介 前后台分离开发&#xff0c;就是在项目开发过程中&#xff0c;对于前端代码的开发由专门的前端开发人员负责&#xff0c;后端代码则由后端开发人员负责&#xff0c;这样可以做到分工明确、各司其职&#xff0c;提高开发效率&#xff0c;前后端代码并行开…

SpringBoot 日志打印

一. 自定义打印日志 开发者自定义打印日志实现步骤: • 在程序中得到日志对象 • 使用日志对象的相关语法输出要打印的内容. 得到日志对象: //日志工厂需要将需要打印的类的类型传递进去,这样我们才知道日志的归属类,才能更方便的定位到文体类 private static Logger logger …

深入理解Session与Cookie:Java Web应用中的状态管理

在Web应用中&#xff0c;状态管理是一个核心概念&#xff0c;它涉及到如何在用户的多次请求之间保持和传递信息。HTTP协议本身是无状态的&#xff0c;意味着服务器并不默认记住之前的请求。为了解决这个问题&#xff0c;开发人员使用了两种主要的技术&#xff1a;Session和Cook…

2023年12月记录内容管理

文章目录 前言1.[vue构建项目](https://mp.csdn.net/mp_blog/creation/editor/134829688)2. [Nodejs后端+express框架](https://mp.csdn.net/mp_blog/creation/editor/134841711)3. [前端知识点](https://mp.csdn.net/mp_blog/creation/editor/132810879)4.[前端知识点-vue篇(…

js_常用事件演示

✨前言✨ 1.如果代码对您有帮助 欢迎点赞&#x1f44d;收藏⭐哟 后面如有问题可以私信评论哟&#x1f5d2;️ 2.博主后面将持续更新哟&#x1f618;&#x1f389;文章目录 &#x1f354;一、在JavaScript中什么是事件&#xff1f;&#x1f35f;二、为什么要使用事件&#x…

杂文月刊投稿方式论文发表要求

《杂文月刊》是由国家新闻出版总署批准的正规文学类期刊。主要内容取向&#xff1a;杂文、散文、小说、诗歌、漫画、文学评论、艺术评论、戏剧文化、地方文化、非遗文化、美学艺术、教育等历史、文化、文学、艺术类的文章。是广大专家、学者、教师、学子发表论文、交流信息的重…

基于SpringBoot的动物领养平台的设计与实现

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的动物领养平台的设计与实…

gzip引入后node_modules中.cache compression-webpack-plugin占用内存过多

1.Gzip Gzip&#xff08;GNU zip&#xff09;是一种常见的文件压缩格式和压缩算法&#xff0c;通常用于在 Web 服务器上对静态资源文件进行压缩&#xff0c;以减小文件大小并加快文件传输速度。在前端开发中&#xff0c;经常会使用 Gzip 压缩来优化网站的性能。 Gzip 压缩通过…