uView Form 表单

此组件一般用于表单场景,可以配置Input输入框,Select弹出框,进行表单验证等。

注意:

由于在nvue下,u-form名称被uni-app官方占用,在nvue页面中请使用u--form名称,在vue页面中使用u--form或者u-form均可。

注意:

需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。 如。

onReady() {//onReady 为uni-app支持的生命周期之一this.$refs.uForm.setRules(this.rules)
},

copy

#平台差异说明

App(vue)App(nvue)H5小程序

#基本使用

此组件一般是用于表单验证使用,每一个表单域由一个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>

copy

从上面的示例我们可以看到,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']},
},

copy

#验证规则属性

每一个验证规则中,可以配置多个属性,下面对常用的属性进行讲解,更具体的可以查看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'],}]
}

copy

#综合实战

上面讲述了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'}]
}

copy

#校验错误提示方式

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>

copy

#校验

进行了上方的配置和讲解后,进入到最后一步,执行验证:
需要通过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>

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

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

相关文章

【普中开发板】基于51单片机音乐盒LCD1602显示( proteus仿真+程序+设计报告+讲解视频)

【普中开发板】基于51单片机音乐盒LCD1602显示( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;P08 1. 主要功能&#xff1a; 基于51单片机AT89C51/52&#…

LLVM(简介)

历史 LLVM(low level virtual machine)起源于伊利诺伊大学的一个编译器实验项目&#xff0c;目前已经发展成一个集编译器和工具链为一体的商业开源项目&#xff0c;因此其英文名称的含义被扩大&#xff0c;不再仅仅是字面意思。其创始人为 Chris Lattner。LLVM项目遵循的开源许…

计算机软件考试试题——附答案

计算机软件考试试题 选择题 在面向对象编程中&#xff0c;继承的主要作用是&#xff1a; A. 提高代码的可读性B. 隐藏对象的实现细节C. 实现多重继承D. 复用已有代码 数据库中&#xff0c;以下哪个操作用于删除表中的所有数据&#xff0c;但保留表的结构&#xff1f; A. DELET…

Go语言命令行参数及cobra使用教程

Go语言命令行参数及cobra使用教程 1.原生命令行参数2.使用CIL框架Cobra创建 rootCmd创建你的 main.go创建其他命令子命令返回和处理错误 3.cobra使用标志4.Cobra位置参数和自定义参数5.Cobra PreRun和PostRun钩子 1.原生命令行参数 os 包以跨平台的方式&#xff0c;提供了一些…

Spring Boot 整合 MinIO自建对象存储服务

GitHub 地址&#xff1a;GitHub - minio/minio: The Object Store for AI Data Infrastructure 另外&#xff0c;MinIO 可以用来作为云原生应用的主要存储服务&#xff0c;因为云原生应用往往需要更高的吞吐量和更低的延迟&#xff0c;而这些都是 MinIO 的优势。安装过程跳过。…

CSS Grid 和 Flexbox

1.使用示例 CSS Grid&#xff1a; CSS Grid 是一种二维网格布局系统&#xff0c;可以用于创建复杂的网格布局。它允许你将元素放置到网格的行和列上&#xff0c;并通过设置网格属性来控制元素的位置和大小。 创建一个简单的 CSS Grid 布局&#xff0c;可以按照以下步骤进行&a…

Numpy基础

目录&#xff1a; 一、简介:二、array数组ndarray&#xff1a;1.array( )创建数组&#xff1a;2.数组赋值和引用的区别&#xff1a;3.arange( )创建区间数组&#xff1a;4.linspace( )创建等差数列&#xff1a;5.logspace( )创建等比数列&#xff1a;6.zeros( )创建全0数组&…

半导体设备系列:半导体制造产能扩张,设备零部件需求旺盛

近年来国内半导体制造产能不断扩张&#xff0c;半导体设备厂商加速成长。我们认为下游发展将拉动上游本地化配套需求&#xff0c;半导体设备零部件迎来高增长阶段。 摘要 半导体设备零部件包含密封圈、EFEM、射频电源、静电吸盘、硅电极、真空泵、气体流量计、喷淋头等产品&a…

python数据分析之交叉验证

python数据分析之交叉验证 1、常用的分类算法 有监督:SVM向量机、梯度提升、决策树(随机森林)、朴素贝叶斯、逻辑斯蒂回归、神经网络(cnn、rnn) 无监督:k-means、隐马尔可夫 2、数据分析过程 1、采集数据 2、数据预处理 3、特征选择 4、模型训练、评估、保存 5、模型…

JVM虚拟机:各种JVM报错总结

错误 java.lang.StackOverflowError java.lang.OutOfMemoryError:java heap space java.lang.OutOfMemoryError:GC overhead limit exceeded java.lang.OutOfMemoryError:Direct buffer memory java.lang.OutOfMemoryError:unable to create new native thread java.lang.OutOf…

时间计算总结

文章目录 1.1&#xff1a;Java 获取两个时间的时间差(时、分、秒)&#xff1a;依赖&#xff1a;方法的说明方法测试 2.1 获取当天的开始时间2.2 获取当天的结束时间2.3 获取昨天的开始时间2.4 获取昨天的结束时间2.5 获取明天的开始时间2.6 获取明天的结束时间2.7 获取本周的开…

第3章 【课后习题】(完整版)

【3.18】写出下面程序的运行结果 //3.18写出下面程序的运行结果 #include <iostream> using namespace std; class test{public:test();~test() {};private:int i; }; test::test() {i25;for(int ctr0;ctr<10;ctr){cout<<"Counting at "<<ctr…

深入浅出:理解 JavaScript 中的 Promise.all()

在现代的 JavaScript 开发中&#xff0c;异步编程是一个无法避免的话题。无论是处理网络请求&#xff0c;用户输入&#xff0c;还是文件操作&#xff0c;异步编程都扮演着核心角色。ES6 引入的 Promise 极大地简化了异步操作&#xff0c;而 Promise.all() 则为处理多个并行的异…

线程的深入学习(二)

前言 上一篇讲了线程池的相关知识&#xff0c;这篇文章主要讲解一个 1.并发工具类如CountDownLatch、CyclicBarrier等。 2.线程安全和并发集合&#xff1a; 3.学习如何使用Java提供的线程安全的集合类&#xff0c;如ConcurrentHashMap、CopyOnWriteArrayList等。 并发工具类 …

Linux学习记录——삼십삼 http协议

文章目录 1、URL2、http协议的宏观构成3、详细理解http协议1、http请求2、http响应1、有效载荷格式2、有效载荷长度3、客户端要访问的资源类型4、修改响应写法5、处理不同的请求6、跳转 3、请求方法&#xff08;GET/POST&#xff09;4、HTTP状态码&#xff08;实现3和4开头的&a…

uniapp中用户登录数据的存储方法探究

Hello大家好&#xff01;我是咕噜铁蛋&#xff01;作为一个博主&#xff0c;我们经常需要在应用程序中实现用户登录功能&#xff0c;并且需要将用户的登录数据进行存储&#xff0c;以便在多次使用应用程序时能够方便地获取用户信息。铁蛋通过科技手段帮大家收集整理了些知识&am…

每天五分钟计算机视觉:揭秘迁移学习

本文重点 随着人工智能的迅速发展,深度学习已经成为了许多领域的关键技术。然而,深度学习模型的训练需要大量的标注数据,这在很多情况下是不现实的。迁移学习作为一种有效的方法,可以在已有的数据和模型上进行训练,然后将其应用于新的任务。这种方法大大降低了对新任务的…

嵌入式(一)嵌入式系统介绍 | 嵌入式微处理器,嵌入式系统开发流程,嵌入式系统应用

文章目录 1 嵌入式系统基本介绍1.1 基本概念1.2 嵌入式微处理器分类1.2.1 微控制器MCU1.2.2 微处理器MPU1.2.3 数字信号处理器&#xff08;DSP&#xff09;1.2.4 混合处理器和片上系统&#xff08;SOC&#xff09;1.2.5 可编程片上系统&#xff08;SOPC&#xff09; 1.3 嵌入式…

书香之家 国学启智——学夫堂幼儿国学托管永嘉上塘实验店启航

在教育创新的道路上&#xff0c;学夫堂幼儿国学托管永嘉上塘实验店迎来了一个重要的时刻。经过三个多月的精心筹备和试运营&#xff0c;今天正式宣布学夫堂幼儿国学托管在永嘉县城北街道景和佳苑8幢105号开门迎客。 学夫堂深信&#xff0c;国学智慧不仅是中华文化的瑰宝&#x…

7-34 通讯录的录入与显示 分数 10

文章目录 每日一言题目输入格式&#xff1a;输出格式&#xff1a;输入样例&#xff1a;输出样例&#xff1a; 结语 每日一言 批判的武器当然不能代替武器的批判。 --〈黑格尔法哲学批判〉导言 题目 通讯录中的一条记录包含下述基本信息&#xff1a;朋友的姓名、出生日期、性别…