本篇参考:

https://developer.salesforce.com/docs/component-library/bundle/lightning-input/documentation

https://www.lightningdesignsystem.com/components/input/#Error

当我们在前端有表单操作或者有大量的输入性条件作为搜索条件情况下, 通常会有一些校验,比如非空校验,类型校验等等。针对salesforce lwc也好或者是aura也好,通常有以下情况的前端校验。

  • badInput:用来判断当前的输入内容是否是一个合法的值;

  • patternMismatch:用来判断当前输入内容是否符合指定模式;

  • rangeOverflow:针对数字相关的类型判断输入内容是否值过大超过了默认的最大值;

  • rangeUnderflow:针对数字相关的类型判断输入内容是否值过小小于默认的最小值;

  • stepMismatch:针对数字相关的类型,我们在输入框使用上或者下按钮以后,可以根据step设置的值进行相关的输入框内容的加或者减,当我们自己改的最终的值不符合step设定,会报错stepMismatch;

  • tooLong:指定value的长度是否超过当前设定的maxlength;

  • tooShort:指定value的长度是否小于当前设定的minlength;

  • typeMismatch:针对url或者email类型的变量,用来判断当前输入的value类型是否匹配;

  • valueMissing:针对必填字段没有填值情况下会报错这种类型错误。

当表单中校验出现这种情况时,会展示相关的默认的错误提示信息。

  • badInput: Enter a valid value.

  • patternMismatch: Your entry does not match the allowed pattern.

  • rangeOverflow: The number is too high.

  • rangeUnderflow: The number is too low.

  • stepMismatch: Your entry isn't a valid increment.

  • tooLong: Your entry is too long.

  • tooShort: Your entry is too short.

  • typeMismatch: You have entered an invalid format.

  • valueMissing: Complete this field.

下图我们恐怕很熟悉了,经常看到类似当输入框不满足情况的默认的展示信息。通过下图可以更好的了解上面的一部分信息。

上面截图中的标红的效果展示即为本篇讲的validity,validity的使用可以使用户在大量的入力操作部分不满足情况下可以进行更好的定位,达到更好的用户体验。

标红操作的css实现样式可以查看上方的参考链接。我们本篇考虑的更多是如何使用。

在form表单中的入力选择的标签大部分都内置了checkValidity / reportValidity / setCustomValidity或者类似函数。比如 input / combobox等等标签。checkValidity用于验证当前的表单的元素是否符合要求,reportValidity用于在checkValidity基础上进行效果展示。如果当前元素符合要求,错误信息清除并且return true;如果当前元素不符合要求,则展示错误信息并且return false。

this.template.querySelectorAll(

我们对上面的代码进行分析:

  1. 通过querySelectorAll获取到当前组件中 lightning-input;

  2. 对每一个 lightning-input元素使用reportValidity方法进行校验,如果当前元素符合要求,则返回true,如果不符合要求,返回false并且元素根据错误的类型展示错误的默认信息;

  3. 通过checkValidity来确认当前元素是否符合,符合返回true,不符合返回false。

需要注意的是,当form表单提交的时候,如果页面中有不符合的元素,并不会阻断你的表单提交。所以我们在页面提交以前如果看到了上面类似的提示不要掉以轻心,需要在save以前进行check,成功走save逻辑,不成功需要返回并且reportValidity()。

通过上面的demo中,我们可以看到使用querySelectorAll来遍历所有lightning-input元素进行reportValidity和checkValidity,这种方式只能遍历到当前component中的所有元素。如果组件包含了子组件,子组件中包含了 input等类似元素,并不能对子组件中的进行校验。以一个demo进行试验。

testSonInputComponent.html:仅用于展示一个输入框

<template>

testParentInputComponent.html:引入testSonInputComponent并且在放一个input组件

<template>

testParentInputComponent.js:遍历所有的input标签,进行reportValidity操作。

import { LightningElement } 

效果展示:当标签都没有输入情况下,只会校验到当前组件中的标签,子组件标签不会被校验到。

如果想要校验到,目前想到的方法为父组件调用子组件的方法,可以将相关子组件的校验功能弥补,但是无法将checkValidity的结果传递过来。如果想要查看allValid,只能在父组件根据是否有值,然后手动设置allValid变量。代码简单修改如下:

testInputSonComponent.js:对方法进行api标签声明,只有声明以后父组件才可以调用。

import { LightningElement, api } 

testInputParentComponent.js:通过querySelector获取到子组件,然后调用子组件方法即可。

import { LightningElement } 

效果展示:

此种方式的一个最大的问题是子组件的validity的结果并无法传递给父组件。项目中是根据子组件的值是否为空在父组件中校验然后设置allValid的值,除此以外没有想到好的方法,熟悉的小伙伴可以给出更好的方案。

除了标准的提示信息以外,lwc给我们提供了一个自定义error message的方法,即setCustomValidity。此方法在很多方法中均有类似的方法,用于当标准的提示信息不满足需求的时候或者自定义的一些校验想要展示自定义的提示信息情况下,使用的方案。当使用setCustomValidity,结合reportValidity即可展示自定义的error场景提示了。

对代码继续改造。当输入框内容不到2个字符进行自定义提示。

import { LightningElement } 

结果展示:

总结:篇中简单的介绍了Validity的简单实用,针对子组件如何更好的适应还没有特别好的方案,有好想法的朋友留言。篇中有不懂的欢迎留言,有错误的欢迎指出。

form必填默认校验_Salesforce LWC学习(十六) Validity 在form中的使用浅谈相关推荐

  1. element子组件中的校验_Salesforce LWC学习(十六) Validity 在form中的使用浅谈

    本篇参考: https://developer.salesforce.com/docs/component-library/bundle/lightning-input/documentation h ...

  2. Element Ui使用技巧——Form表单的校验规则rules详细说明;element的 form 表单rules详细用法

    本文章是在项目开发时遇到问题看到的一片好文, 摘录自[博客园]–[逍遥云天]. 感谢作者 地址 – https://www.cnblogs.com/xyyt/p/13366812.html 在 [逍遥 ...

  3. Python的学习(十六):对文件的操作

    Python的学习(十六):对文件的操作 编码格式的介绍 Python中的解释器使用的是Unicode(内存) .py文件在磁盘上使用UTF-8存储(外存) 如何修改文件格式?不写的话默认为UTF-8 ...

  4. OpenCV与图像处理学习十六——模板匹配

    OpenCV与图像处理学习十六--模板匹配 一.模板匹配介绍 二.代码应用 一.模板匹配介绍 模板匹配是一种最原始.最基本的模式识别方法,研究某一特定目标的图像位于图像的什么地方,进而对图像进行定位. ...

  5. PyTorch框架学习十六——正则化与Dropout

    PyTorch框架学习十六--正则化与Dropout 一.泛化误差 二.L2正则化与权值衰减 三.正则化之Dropout 补充: 这次笔记主要关注防止模型过拟合的两种方法:正则化与Dropout. 一 ...

  6. 计算机知识对于老师的帮助,感念师恩·每日之星 | 帮助学生打通计算机专业学习的“任督”二脉——记第十六届“我心目中的好老师”、计算机科学与技术学院黄秋波老师...

    [编者按]教师是立校之本,师德是教育之魂,在东华校园里,每年的"我心目中的好老师"评选.青年教师讲课竞赛等活动,都会涌现出一批深受学生爱戴的老师,在2016年教师节来临之际,在这个 ...

  7. element ui表单必填_element ui判断是否必填添加校验

    是 否 v-for="item in appForm.findListData" :key="item.dictKey" :label="item.d ...

  8. 强化学习(十六) 深度确定性策略梯度(DDPG)

    在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...

  9. Salesforce LWC学习(二) helloWorld程序在VSCode中的实现

    上一篇我们简单的描述了一下Salesforce DX的配置以及CLI的简单功能使用,此篇主要简单描述一下LWC如何实现helloWorld以及LWC开发时应该注意的一些规范. 做国内项目的同学直观的感 ...

最新文章

  1. linux tmux离线安装,linux环境下安装tmux
  2. pyqt5讲解5:窗口绘图类控件QPainter,QPen,QBrush,QPixmap
  3. 云计算设计模式(十六)——优先级队列模式
  4. Unity 2017 Game Optimization 读书笔记 Dynamic Graphics(2)
  5. 不用跑项目,组件效果所见即所得,绝了!
  6. mybatis不等于某个字符串的值_MyBatis 的 4 个妙用,别再踩坑了!
  7. 【Python3网络爬虫开发实战】1.3.1-lxml的安装
  8. Appium+python自动化(十六)- ADB命令,知否知否,应是必知必会(超详解)
  9. Iphone4信号,苹果象个被惯坏的孩子
  10. swift 第五课 定义model类 和 导航栏隐藏返回标题
  11. linux安装jdk1.8之后报错Error: dl failure on line 893的解决办法
  12. python基于scipy模块实现统计学中三大相关系数的计算
  13. vs 生成get set_使用EasyCode+Lombok快速生成增删查改的代码
  14. Java基础(二):面向对象
  15. 20款超级好用的chrome拓展插件让你的工作效率唰唰唰
  16. c语言自动变量全局变量,C语言全局变量的一些简单介绍
  17. 中国园林设备行业市场供需与战略研究报告
  18. 动态规划经典例题——最长公共子序列和最长公共子串(python)
  19. War3地图编辑器基础:物体编辑器F6(自定义单位+单位属性设置)
  20. 安装arcgis10.2和arcgis server

热门文章

  1. while语句的使用
  2. 【C语言】输入5个整数并按输入顺序逆序输出
  3. git git 查看远程库_如何从Git远程存储库中提取
  4. 项目使用ts辅助_启动辅助项目后的前100天该做什么
  5. Python中匿名函数与内置高阶函数详解
  6. python图像处理:一福变五福
  7. Python快速安装库的靠谱办法
  8. Vue——进阶(过滤器、数据交互、生命周期、ES6语法)
  9. python的json中方法以及jsonpath模块
  10. Celery的日志配置及日志按天切分