首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Salesforce学习 Lwc(三)自定义开发时进行Validation验证

Salesforce学习 Lwc(三)自定义开发时进行Validation验证

原创
作者头像
repick
修改于 2020-12-30 03:08:18
修改于 2020-12-30 03:08:18
94900
代码可运行
举报
文章被收录于专栏:SalesforceSalesforce
运行总次数:0
代码可运行

关于自定义开发过程中,是否可以实现自定义validation验证。

我们在使用 【lightning-record-edit-form】标签开发过程中,表单提交之后,画面输入的内容不符合要求时,error信息显示在项目上。

例:必须项目未输入

lwc代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <lightning-record-edit-form record-id={recordId} object-api-name="Opportunity"
  onsubmit={handleSubmit}>
      <lightning-messages></lightning-messages>
      <lightning-layout multiple-rows="true">
          <lightning-layout-item size="6">
              <lightning-input-field field-name="Name"></lightning-input-field>
          </lightning-layout-item>
          <lightning-layout-item size="6">
              <lightning-input-field field-name="OrderNumber__c"></lightning-input-field>
          </lightning-layout-item>
          <lightning-layout-item size="12">
              <div class="slds-m-top_medium">
                  <lightning-button class="slds-m-top_small" label="Cancel"
                  onclick={handleReset}></lightning-button>
                  <lightning-button class="slds-m-top_small" type="submit"
                  label="Save Record"  onclick={handleClick}></lightning-button>
              </div>
          </lightning-layout-item>
      </lightning-layout>
  </lightning-record-edit-form>
</template>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { LightningElement,track,api,wire } from 'lwc';
import { updateRecord,getRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { NavigationMixin } from 'lightning/navigation';
import OPPORTUNITY_ID_FIELD from '@salesforce/schema/Opportunity.Id';
import OPPORTUNITY_NAME_FIELD from '@salesforce/schema/Opportunity.Name';
import OPPORTUNITY_ORDER_NUMBER_FIELD from '@salesforce/schema/Opportunity.OrderNumber__c';
const fields = [
    OPPORTUNITY_ID_FIELD,
    OPPORTUNITY_NAME_FIELD,
    OPPORTUNITY_ORDER_NUMBER_FIELD
];
export default class OpportunityDetailEditWithEditForm extends NavigationMixin(LightningElement) {

    @api recordId = '0066g00000GQ4GyAAL';
    @track isShowErrorDiv = false;
    @track errorMessageList = [];

    @track isFormValid = true;

    handleSubmit(event) {
        event.preventDefault();
        if(!this.isShowErrorDiv) {
            const fields = {};
            fields[OPPORTUNITY_ID_FIELD.fieldApiName] = this.recordId;
            fields[OPPORTUNITY_NAME_FIELD.fieldApiName] = event.detail.Name;
            fields[OPPORTUNITY_ORDER_NUMBER_FIELD.fieldApiName] = event.detail.OrderNumber__c;
            const recordInput = { fields };
            this.errorMessageList = [];
            this.isShowErrorDiv = false;
            updateRecord(recordInput)
            .then(() => {
                this.dispatchEvent(
                    new ShowToastEvent({
                        title: 'Success',
                        message: 'Opportunity updated',
                        variant: 'success'
                    })
                );
            }).catch(error => {
                //
            });
        }
    }
    handleReset(event) {
        const inputFields = this.template.querySelectorAll(
            'lightning-input-field'
        );
        if (inputFields) {
            inputFields.forEach(field => {
                field.reset();
            });
        }
    }
}

这种情况,跟标准UI有一定的区别,下边是标准UI,如图所示,画面头部也有显示error信息。

解决方法:首先开发error显示用lwc画面,然后在表单提交按钮上增加【onclick】事件,因为onclick事件会优先于onsubmit被执行。所以画面上的validation验证可以在onclick事件中执行,验证成功之后,会执行onsubmit

error页面的lwc:

errorMessageModal.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <template if:true={isShowErrorDiv}>
      <div class="pageLevelErrors" tabindex="-1" >
          <div class="desktop forcePageError" aria-live="assertive" data-aura-class="forcePageError">
              <div class="genericNotification">
                  <span class="genericError uiOutputText" data-aura-class="uiOutputText">
                      このページのエラーを確認してください。
                  </span>
              </div>
              <template if:true={isShowMessage}>
                  <ul class="errorsList">
                      <template for:each={errorMessageList} for:item="errorMessageItem">
                          <li key={errorMessageItem}>{errorMessageItem}</li>
                      </template>
                  </ul>
              </template>

          </div>
      </div>
  </template>
</template>

errorMessageModal.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { LightningElement,api,track } from 'lwc';

export default class ErrorMessageModal extends LightningElement {
  @api isShowErrorDiv = false;
  @api errorMessageList = [];
  @track isShowMessage = false;
  renderedCallback() {
      if(this.errorMessageList && this.errorMessageList.length > 0) {
          this.isShowMessage = true;
      } else {
          this.isShowMessage = false;
      }
  }
}

errorMessageModal.css

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.forcePageError {
  border-bottom: 1px solid var(--lwc-colorBorderSeparatorAlt,rgb(221, 219, 218));
  margin-bottom: var(--lwc-spacingMedium,1rem);
  padding-bottom: var(--lwc-spacingSmall,0.75rem);
}

.forcePageError.desktop .genericNotification {
  font-weight: var(--lwc-fontWeightLight,300);
  border-radius: var(--lwc-borderRadiusMedium,0.25rem);
}

.forcePageError .genericNotification {
  background: var(--lwc-colorBackgroundToastError,rgb(194, 57, 52));
  padding: var(--lwc-spacingMedium,1rem);
  color: var(--lwc-colorTextModal,rgb(255, 255, 255));
  line-height: var(--lwc-lineHeightHeading,1.25);
}

.forcePageError .errorsList {
  list-style: none;
  color: var(--lwc-colorTextError,rgb(194, 57, 52));
  line-height: var(--lwc-lineHeightText,1.5);
  margin: 0;
  padding: var(--lwc-spacingXSmall,0.5rem) var(--lwc-spacingMedium,1rem) var(--lwc-spacingXxSmall,0.25rem) var(--lwc-spacingMedium,1rem);
}

lwc代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <lightning-record-edit-form record-id={recordId} object-api-name="Opportunity"
  onsubmit={handleSubmit}>
      <lightning-messages></lightning-messages>
      <c-error-message-modal is-show-error-div={isShowErrorDiv}
      error-message-list={errorMessageList}>
      </c-error-message-modal>
      <lightning-layout multiple-rows="true">
          <lightning-layout-item size="6">
              <lightning-input-field field-name="Name"></lightning-input-field>
          </lightning-layout-item>
          <lightning-layout-item size="6">
              <lightning-input-field field-name="OrderNumber__c"></lightning-input-field>
          </lightning-layout-item>
          <lightning-layout-item size="12">
              <div class="slds-m-top_medium">
                  <lightning-button class="slds-m-top_small" label="Cancel"
                  onclick={handleReset}></lightning-button>
                  <lightning-button class="slds-m-top_small" type="submit"
                  label="Save Record"  onclick={handleClick}></lightning-button>
              </div>
          </lightning-layout-item>
      </lightning-layout>
  </lightning-record-edit-form>
</template>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { LightningElement,track,api,wire } from 'lwc';
import { updateRecord,getRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { NavigationMixin } from 'lightning/navigation';
import OPPORTUNITY_ID_FIELD from '@salesforce/schema/Opportunity.Id';
import OPPORTUNITY_NAME_FIELD from '@salesforce/schema/Opportunity.Name';
import OPPORTUNITY_ORDER_NUMBER_FIELD from '@salesforce/schema/Opportunity.OrderNumber__c';
const fields = [
    OPPORTUNITY_ID_FIELD,
    OPPORTUNITY_NAME_FIELD,
    OPPORTUNITY_ORDER_NUMBER_FIELD
];
export default class OpportunityDetailEditWithEditForm extends NavigationMixin(LightningElement) {

    @api recordId = '0066g00000GQ4GyAAL';
    @track isShowErrorDiv = false;
    @track errorMessageList = [];

    @track isFormValid = true;

    handleSubmit(event) {
        event.preventDefault();
        if(!this.isShowErrorDiv) {
            const fields = {};
            fields[OPPORTUNITY_ID_FIELD.fieldApiName] = this.recordId;
            fields[OPPORTUNITY_NAME_FIELD.fieldApiName] = event.detail.Name;
            fields[OPPORTUNITY_ORDER_NUMBER_FIELD.fieldApiName] = event.detail.OrderNumber__c;
            const recordInput = { fields };
            this.errorMessageList = [];
            this.isShowErrorDiv = false;
            updateRecord(recordInput)
            .then(() => {
                this.dispatchEvent(
                    new ShowToastEvent({
                        title: 'Success',
                        message: 'Opportunity updated',
                        variant: 'success'
                    })
                );
            }).catch(error => {
                //
            });
        }
    }

    handleClick(event) {
        let allInputList = Array.from(this.template.querySelectorAll('lightning-input-field'));
        let invalidFieldLabel = [];
        const allValid = allInputList.forEach(field => {
            if(field.required && field.value === '') {
                invalidFieldLabel.push(field.fieldName);
                this.isShowErrorDiv = true;
            }
        });

        if(this.isShowErrorDiv) {
            this.errorMessageList.push('These required fields must be completed: ' + invalidFieldLabel.join(','));
        }
    }
    handleReset(event) {
        const inputFields = this.template.querySelectorAll(
            'lightning-input-field'
        );
        if (inputFields) {
            inputFields.forEach(field => {
                field.reset();
            });
        }
    }
}

修改后效果:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
cdn访问报错564问题排查方法
看下接入域名的解析是否在腾讯云的CDN上,如果没有在腾讯云的CDN的cname记录值上,那么可以自己排查下访问问题了,此时相当于没有使用腾讯云cdn;
杜志强
2019/03/07
3.3K0
cdn访问报错564问题排查方法
用好CDN
前言 当你的网站或者APP访问量日渐增多,用户体验却持续下降,服务器性能严重不足的时候,选择接入CDN是大多数情况要必须做的,当你在众多CDN厂商中好不容易选择了一家(不知怎么选择,可以闭眼选择腾讯云CDN🙂),进行配置的时候,不要简单的认为按照入门文档配置完就觉得万事大吉了。很多案例证明,接入CDN只是一小步,后面出现的各种问题,会让你抓狂。下面我们就来讲讲如何用好CDN,让它发挥出最佳效能。以下涉及到的CDN事项,将以腾讯云CDN作为案例。 Step1. 资源划分
陈志杰
2020/11/08
12.1K0
用好CDN
【最佳实践】巡检项:内容分发网络(CDN)错误状态码占比
一般来讲,若请求返回的状态码是4xx、5xx,会被视为错误状态码。如果这些异常状态码的请求比例超过5%,则需要引起重视及深入分析,看看是什么原因导致,对实际业务影响几何。
陈志杰
2022/04/12
1K0
CDN-使用HTTPS协议回源
互联网上存在各种劫持,防不胜防,建议网站采用HTTPS(同时配置HTTP强制跳转HTTPS)
浅言墨殇笑叹生
2021/10/15
3.5K0
为了搞清楚CDN的原理,我头都秃了...
原文地址:https://juejin.cn/post/6944420222757503006
winty
2021/05/20
4.1K0
WordPress使用腾讯云CDN配置如何实现https访问?
WordPress使用腾讯云CDN配置如何实现https访问? 最近有很多站长朋友问腾讯云CDN配置如何实现https访问?下面小编赵一八笔记以WordPress模板为例,希望能够帮到大家。 一.腾讯
用户7261497
2020/12/03
5.1K0
WordPress使用腾讯云CDN配置如何实现https访问?
HTTPS是什么意思?HTTP与HTTPS的区别,以及HTTPS的配置方法
HTTPS协议(Hyper Text Transfer Protocol over Secure Socket Layer,即超文本传输安全协议)。按照维基百科的定义,HTTPS 是基于 HTTP 的扩展,用于计算机网络的安全通信,已经在互联网得到广泛应用。
小狐狸说事
2022/11/17
2.5K0
HTTPS是什么意思?HTTP与HTTPS的区别,以及HTTPS的配置方法
如何配置cdn且如何防止被刷流量教程
想必大家都对这东西并不陌生,很多朋友配置完cdn,网站不能正常访问,遭受cc攻击导致流量被刷什么的,然后在群里求助还没回,这种心情我深有体会。今天我来出一期cdn配置的教程,都是我一次一次试出来的。
小狐狸说事
2022/11/18
4.9K0
如何配置cdn且如何防止被刷流量教程
关于接入CDN的一些实用策略
前言 当你的网站或者APP访问量日渐增多,用户体验却持续下降,服务器性能严重不足的时候,选择接入CDN是大多数情况要必须做的,当你在众多CDN厂商中好不容易选择了一家(不知怎么选择,可以闭眼选择腾讯云CDN🙂),进行配置的时候,不要简单的认为按照入门文档配置完就觉得万事大吉了。很多案例证明,接入CDN只是一小步,后面出现的各种问题,会让你抓狂。下面我们就来讲讲如何用好CDN,让它发挥出最佳效能。以下涉及到的CDN事项,将以腾讯云CDN作为案例,仅供参考。 Step1. 资源划分
陈志杰
2020/11/12
2.3K0
关于接入CDN的一些实用策略
【玩转腾讯云】利用Serverless,实现COS&CDN Combo Handler
小S维护的一个前端系统,单个页面中有数个没有依赖关系的 js 、css 需要加载,此时浏览器会分别去请求对应的文件。此时小S收到Leader给的一个任务:优化前端的静态资源请求,尽量做合并。
galen
2020/04/08
4.9K4
【玩转腾讯云】利用Serverless,实现COS&CDN Combo Handler
玩转腾讯云CDN
加速区域选择为中国境内或全球时,需要先完成 ICP 备案,若您的域名尚未完成 ICP 备案,您可以使用腾讯云网站备案。
杜志强
2021/07/25
12.3K0
玩转腾讯云CDN
CDN的那些事
前段时间,群友的cdn被刷爆了,这就引起了我的恐慌,我大概接入了3个域名和一个cos,要刷的话,可能会倾家荡产,国内的cdn比较便宜但是没有防护,国外的就比较贵,节点少,开了等于没开,但是他们是有防护的,盗刷应该不会这么严重,腾讯云其实也有一个类似的功能产品,scdn,有个问题,太贵啦,当时年少不懂事,测试给我花了30块,应该可以想象价格的高昂了吧。这次针对cdn的某些设置进行了一点点的优化,至少在你的网站被cc或者ddos时,自动关闭cdn,避免高昂的费用。
wresource
2023/01/31
3.4K1
腾讯云CDN报564错误码解决方案
前言 HTTP ERROR 564错误码 我wiki,Google找了半天,没有找到关于HTTP ERROR 564错误的资料! 根据我了解到的信息564错误码是回源失败或者回源超时 简单描述一下我遇到的问题:前几天我为了让博客支持https的时候为了提升访问速度用了腾讯云的CDN!然后问题就开始了. 第一次:我默认CDN配置的时候访问60-80次间歇性出现564,然后我提交工单后占时解决了 第二次:我配置CDN高级缓存的时候访问量高后又间歇性564,然后我又提交了工单说我缓存配置错误,但是我默认全部不缓
小柒吃地瓜
2020/04/21
3.1K1
CDN的那些事
前段时间,群友的cdn被刷爆了,这就引起了我的恐慌,我大概接入了3个域名和一个cos,要刷的话,可能会倾家荡产,国内的cdn比较便宜但是没有防护,国外的就比较贵,节点少,开了等于没开,但是他们是有防护的,盗刷应该不会这么严重,腾讯云其实也有一个类似的功能产品,scdn,有个问题,太贵啦,当时年少不懂事,测试给我花了30块,应该可以想象价格的高昂了吧。这次针对cdn的某些设置进行了一点点的优化,至少在你的网站被cc或者ddos时,自动关闭cdn,避免高昂的费用。
wresource
2023/01/22
3K1
CDN的那些事
Typecho博客全站部署腾讯云CDN教程-星泽V社
昨天写了一篇使用cdn的教程,因为我也是第一次弄,出了不少的差错,今天重新写一篇。 本文参考 IOIOX博客 文章教程修改,已获得作者授权,如果有看不懂的地方请 查看原文 ;
星泽V社
2022/03/02
1.7K0
Typecho博客全站部署腾讯云CDN教程-星泽V社
CDN缓存的那些事儿
不缓存配置(后台设置) > 自定义缓存配置(后台配置) > 源站缓存配置 > 默认缓存策略 PS:源站缓存配置,指 Cache-Control 和 Expires 请求头的设置
幻影龙王
2021/09/05
1.8K0
一键https(WAF)接入问题--重定向次数过多
腾讯云‘一键HTTPS’底层使用就是SaaS WAF,所以这里的排查思路是一致的。SaaS WAF可以理解为一个Nginx服务集群,域名接入SaaS WAF并将DNS解析到WAF CNAME后,将隐藏源站,客户端的访问流量会先经过SaaS WAF,由WAF进行对访问流量进行识别、拦截、正常流量转发回源。
韦锡隆
2022/01/21
3.3K0
一键https(WAF)接入问题--重定向次数过多
浅谈推进有赞全站 HTTPS 项目-工程篇
HTTPS 在 HTTP 的基础上增加了 SSL/TLS 加密,提供了更加安全的传输协议。俨然已经属于各大网站的标配。有赞作为一个 SaaS 平台,涉及到用户的商品,交易,支付等关键性流程。支持全站 HTTPS,提高网站安全是我们的基础保障。本文关注的事情包括: 了解 HTTPS 基础原理,切换 HTTPS 需要切换的内容,如何监控和实际操作,以及遇到的一些难点。
有赞coder
2020/08/25
6400
浅谈推进有赞全站 HTTPS 项目-工程篇
腾讯云cdn问题 Q&A
假设您的业务源站域名为www.test.com,域名接入 CDN 开始使用加速服务后,当您的用户发起 HTTP 请求时,实际的处理流程如下图所示:
杜志强
2019/03/06
12K0
腾讯云cdn问题 Q&A
借助腾讯云 CDN 开启全站 https 及问题解决分享
张戈
2016/09/28
11K1
借助腾讯云 CDN 开启全站 https 及问题解决分享
推荐阅读
相关推荐
cdn访问报错564问题排查方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验