Salesforce LWC学习(二十六) 简单知识总结篇三
首先本篇感谢长源edward老哥的大力帮助。
背景:我们在前端开发的时候,经常会用到输入框,并且对这个输入框设置 required或者其他的验证,当不满足条件时使用自定义的UI或者使用标准的 input的 setCustomValidity等操作方式去进行UI的展示。我们在https://www.cnblogs.com/zero-zyq/p/12734982.html有描述相关的操作,今天的内容就以这个知识点内容进行展开。首先先上代码
inputRequiredTest.html
<template>
<lightning-card title="input demo">
<lightning-input type="text" value={inputValue} onchange={handleChangeEvent} required label="test input">
</lightning-input>
</lightning-card>
</template>
inputRequiredTest.js
import { LightningElement, track } from 'lwc'; export default class InputRequiredTest extends LightningElement {
@track inputValue = ''; handleChangeEvent(event) {
this.inputValue = event.detail.value;
}
}
展示效果:
1. 输入框移入再移出,因为项目有必填字段的要求,所以会展示让你完成这个字段的填写
2. 输入内容,焦点还在输入框中情况下,仍然展示要求必填的信息
3. 从输入框中移出焦点,红色标记自动消失
有一些客户很挑剔,希望的是当输入内容以后就要将红色标记移出,因为当前的输入框已经是有值的状态,当然这个很好实现,salesforce lwc给我们提供了 setCustomValidity方法,设置内容为空,再一report即可。优化后的 inputRequiredTest.js
import { LightningElement, track } from 'lwc'; export default class InputRequiredTest extends LightningElement {
@track inputValue = ''; handleChangeEvent(event) {
this.inputValue = event.detail.value;
if(this.template.querySelector('lightning-input').checkValidity()) {
this.template.querySelector('lightning-input').setCustomValidity('');
this.template.querySelector('lightning-input').reportValidity();
}
}
}
展示效果:最开始的时候是红色的不截图了,当输入框里面输入了内容还在焦点状态下,也不在展示红框
此种需求便可以完美的解决。除了此种需求,有时候还会有其他类似的需求,比如当前尽管是输入框,但是有很多模板内容供选择,点击某个按钮或者选择某个单选框可以将内容给到输入框中。将前后端代码修改以后的效果如下:
inputRequiredTest.html
<template>
<lightning-card title="input demo">
<lightning-input type="text" value={inputValue} onchange={handleChangeEvent} required label="test input">
</lightning-input><br/>
<lightning-button label="set value" onclick={handleSetValueClick}></lightning-button>
</lightning-card>
</template>
inputRequiredTest.js
import { LightningElement, track } from 'lwc'; export default class InputRequiredTest extends LightningElement {
@track inputValue = ''; handleChangeEvent(event) {
this.inputValue = event.detail.value;
if(this.template.querySelector('lightning-input').checkValidity()) {
this.template.querySelector('lightning-input').setCustomValidity('');
this.template.querySelector('lightning-input').reportValidity();
}
} handleSetValueClick(event) {
this.inputValue = 'test';
if(this.template.querySelector('lightning-input').checkValidity()) {
this.template.querySelector('lightning-input').setCustomValidity('');
this.template.querySelector('lightning-input').reportValidity();
}
}
}
展示效果:当我们先输入焦点,移出展示红框以后,点击按钮,值设置上了,竟然没有消失???当然,此时我们将焦点消失,还是可以红框消失。一样的代码,不一样的效果。
问了一圈无果以后私聊了牛逼的Edward老哥,根据代码一点点分析,是否设置 track了啊等等一圈圈排查以后,老哥说,要么你先试试 checkValidity等几句使用 setTimeout,等他一秒,保证 这个值顺利赋值完,renderedCallback走完了,那这几句才能有效。赶紧去试试,于是后面的代码变成了下面这样。
handleSetValueClick(event) {
this.inputValue = 'test';
window.clearTimeout(this.delayTimeout);
this.delayTimeout = setTimeout(() => {
if(this.template.querySelector('lightning-input').checkValidity()) {
this.template.querySelector('lightning-input').setCustomValidity('');
this.template.querySelector('lightning-input').reportValidity();
}
}, 1000); }
通过上述代码,当赋值以后,神奇的搞定了。按照老哥的说法,赋值以后确实改变了,可能还没有渲染好,调用了后面,导致了这种尴尬的问题。
总结:篇中介绍了针对下面的这种方式如何使用 setTimeout搞定,很惭愧的是以前博客中写过 setTimeout的用法,但是这里却并想不到这个原因,学无止境,自己还需要更努力啊。篇中有错误地方欢迎指出,有不懂欢迎留言。有其他实现方式不吝赐教。
Salesforce LWC学习(二十六) 简单知识总结篇三的更多相关文章
- Salesforce LWC学习(二十五) Jest Test
本篇参看: https://trailhead.salesforce.com/content/learn/modules/test-lightning-web-components https://j ...
- Salesforce LWC学习(二十八) 复制内容到系统剪贴板(clipboard)
本篇参考: https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Interact_with_the_clipb ...
- Salesforce LWC学习(二十二) 简单知识总结篇二
本篇参看: https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.reactivity_fi ...
- Salesforce LWC学习(二十四) Array.sort 浅谈
本篇参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort sal ...
- Salesforce LWC学习(二十九) getRecordNotifyChange(LDS拓展增强篇)
本篇参考: https://developer.salesforce.com/docs/component-library/documentation/en/lwc/data_ui_api https ...
- Salesforce LWC学习(四十) dynamic interaction 浅入浅出
本篇参考: Configure a Component for Dynamic Interactions in the Lightning App Builder - Salesforce Light ...
- Salesforce LWC学习(二十一) Error浅谈
本篇参考:https://developer.salesforce.com/docs/component-library/documentation/en/lwc/data_error https:/ ...
- Java开发学习(二十六)----SpringMVC返回响应结果
SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...
- Salesforce LWC学习(二) helloWorld程序在VSCode中的实现
上一篇我们简单的描述了一下Salesforce DX的配置以及CLI的简单功能使用,此篇主要简单描述一下LWC如何实现helloWorld以及LWC开发时应该注意的一些规范. 做国内项目的同学直观的感 ...
随机推荐
- 结对项目:四则运算(C语言)
github地址:https://github.com/nilonger/arithmetic 结对伙伴:杨锐龙+黄海钊 一.项目要求 1.1 题目:实现一个自动生成小学四则运算题目的命令行程序(也可 ...
- 发布 npm遇到的问题
npm publish 遇到 403 怎么办? 这说明你没有切换到 npm 原始源,那么你只需要用 npm config delete registry 删除淘宝源,然后再 publish. publ ...
- 归纳从文件中读取数据的六种方法-JAVA IO基础总结第2篇
在上一篇文章中,我为大家介绍了<5种创建文件并写入文件数据的方法>,本节我们为大家来介绍6种从文件中读取数据的方法. 另外为了方便大家理解,我为这一篇文章录制了对应的视频:总结java从文 ...
- Python开发的入门教程(六)-函数
介绍 本文主要介绍Python中函数的基本知识和使用 Python之什么是函数 我们知道圆的面积计算公式为: S = πr² 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同 ...
- PJSIP开发指南
一.通用设计 1.1 架构 1.1.1 通信图 下面的图展示了SIP消息在PJSIP组件间从后端到前端如何传递的. 1.1.2 类图 下面的图显示类视图 1.2 E ...
- laravel在视图中使用类似于“__PUBLIC__”,“__UPLOADS__”的操作
首先在config文件夹下建立static.php文件 然后在里面定义常量 例: <?php define('__PUBLIC__', '/'); define('__UPLOADS__', ' ...
- 安装Android Studio之后无法直接打开SDK Manager
之前安装的android studio之后,SDK Manager和AVD Manager两个运行程序双击都打不开页面了,之前都是正常的,所以java环境变量的问题是不存在的. SDK Manager ...
- Tesseract OCR 安装尝试
1.简介 Tesseract是一个图像识别项目,将图中的文字识别出来.将一个.jpg .png 等等 的图片作为输入,.txt作为识别内容输出 Tesseract项目GitHub地址 2.安装 你可以 ...
- 持续部署入门:基于 Kubernetes 实现滚动发布
前言 软件世界比以往任何时候都更快.为了保持竞争力,需要尽快推出新的软件版本,而不会中断活跃用户访问,影响用户体验.越来越多企业已将其应用迁移到 Kubernetes. 在 Kubernetes 中有 ...
- C++11的decltype关键字
C++11的decltype关键字 概述 decltype关键字和auto有异曲同工之处 有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(如果要初始化就用auto了 ...