Angular - 错误:密码更改验证器中的对象可能为空

Posted

技术标签:

【中文标题】Angular - 错误:密码更改验证器中的对象可能为空【英文标题】:Angular - Error: Object is possibly null in password change validator 【发布时间】:2021-09-16 08:02:21 【问题描述】:

我在 Angular-12 中有这个密码更改验证器:

import  AbstractControl, ValidationErrors  from '@angular/forms';

export class OldPwdValidators 
  static shouldBe1234(control: AbstractControl) : Promise<ValidationErrors | null> 
    return new Promise((resolve,reject) => 
        if(control.value !== '1234')
          resolve( shouldBe1234: true );
        else
          resolve(null);
    );
  

  static matchPwds(control: AbstractControl) 
    let newPwd2 = control.get('newPwd');
    let confirmPwd2 = control.get('confirmPwd');
    if(newPwd2.value !== confirmPwd2.value)
      return  pwdsDontMatch: true ;
    
    return null;
  

我收到了这个错误:

对象可能为空

这两行高亮显示:

newPwd2.value

确认Pwd2.value

【问题讨论】:

这能回答你的问题吗? Typescript, how to pass "Object is possibly null" error? 你登录了这个control.get('newPwd') 【参考方案1】:

根据AbstractControl get(),

返回:AbstractControl |空

因此newPwd2confirmPwd2 可能是null


解决方案 1

如果您确认newPwdconfirmPwd 控件都存在(保证),您可以将其转换为AbstractControl

let newPwd2: AbstractControl = control.get('newPwd') as AbstractControl;
let confirmPwd2: AbstractControl = control.get('confirmPwd') as AbstractControl;

Solution 1 on StackBlitz


解决方案 2

在访问其属性之前检查newPwdconfirmPwd 不得为nullundefined

static matchPwds(control: AbstractControl) 
  let newPwd2 = control.get('newPwd');
  let confirmPwd2 = control.get('confirmPwd');

  if (newPwd2 && confirmPwd2) 
    if (newPwd2.value !== confirmPwd2.value) 
      return  pwdsDontMatch: true ;
    
  
  return null;

Solution 2 on StackBlitz

【讨论】:

以上是关于Angular - 错误:密码更改验证器中的对象可能为空的主要内容,如果未能解决你的问题,请参考以下文章

如何在Rails 5中更改设计中的验证错误消息

如何在 Angular 2 上实现 ngOnChanges 以进行输入验证,而不触发“检查后表达式已更改。”错误

输入错误密码时出现验证错误时如何防止角色更改

angular2 与 Slim 框架 jwt 身份验证

Angular 7 中的动态验证: enable() 和 setValidators 取决于更改触发的标志

在自定义验证中使用 Angular JS + Laravel 检查当前密码