如何解决反应式表单中的电子邮件验证错误:Angular 中的对象可能为“空”

迈克福卢

我在 Angular-11 中有这个代码:

这是代码的注册打字稿组件。

export class SignupComponent implements OnInit {

  form!: FormGroup;
  submitted = false;

  constructor(
    private fb: FormBuilder,
  ) {}

  // tslint:disable-next-line:typedef
  ngOnInit(): void {
    this.form = this.fb.group({
      name: ['', Validators.required],
      email: ['', [Validators.required, Validators.email]],
      password: ['', [Validators.required, Validators.minLength(6)]],
      confirm_password: ['', Validators.required]
    })
  }

  // tslint:disable-next-line:typedef
  get f() {
    return this.form.controls;
  }

  // tslint:disable-next-line:typedef
  onSubmit() {
    this.submitted = true;
    const formData = this.form.getRawValue();

    const data = {
      name: formData.name,
      email: formData.email,
      password: formData.password,
      confirm_password: formData.confirm_password
    };

    // stop here if form is invalid
    if (this.form.invalid) {
      return;
    }

    const header = {
      'Content-Type': 'application/json'
    };
    return this.api.post('auth/signup', data, header).subscribe(
      (result: any) => {
        this.router.navigate(['/auth']);
      },
    );
  }
}

然后signup.html:

<div class="form-group">
  <div class="input-group mb-3">
    <input type="email" name="email" class="form-control" placeholder="[email protected]" formControlName="email" [ngClass]="{ 'is-invalid': submitted && f.email.errors }">
    <div class="input-group-append">
      <div class="input-group-text"><i class="fa fa-envelope"></i></div>
    </div>
    <div *ngIf="f.email.errors.required">Email is required</div>
    <div *ngIf="f.email.errors.email">Email must be a valid email address: [email protected]</div>
  </div>
</div>

当我尝试为该项目提供服务时,出现此错误:

Error: src/app/signup/signup.component.html:59:48 - error TS2531: Object is possibly 'null'.

59                     <div *ngIf="f.email.errors.required">Email is required</div>
                                              ~~~~~~~~

 src/app/signup/signup.component.ts:13:16
13   templateUrl: './signup.component.html',
                  ~~~~~~~~~~~~~~~~~~~~~~~~~
Error occurs in the template of component SignupComponent.


Error: src/app//signup/signup.component.html:60:48 - error TS2531: Object is possibly 'null'.

60                     <div *ngIf="f.email.errors.email">Email must be a valid email address: [email protected]</div>

除了电子邮件之外,所有其他验证都有效。我已经有一段时间了。我试图弄清楚,但仍然没有解决方案。

我该怎么做才能解决这个问题?

谢谢

阿肖特·阿列克萨尼扬

您可以使用hasError控制方法而不是error.errorName; 它正在返回布尔值;true当错误存在时

control.hasError('errorName')

使用示例

f.email.hasError('required') 

或者

第二种方法是在键名前加一个问号

像这样

f.email.errors?.required

这相当于

if(f.email.errors !== null || f.email.errors !== undefined) {
   f.email.errors.required
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

比较时对象可能为空错误打字稿

Typescript,如何传递“对象可能为空”错误?

R:在Shiny中,我如何解决适用于“反应式”类对象的“ xtable”的适用方法

为什么我的反应式表单验证在Angular中失败

如何在Angular 4中以反应形式验证多个电子邮件地址

对象在打字稿中可能为'null'

Angular 7中的反应式电子邮件验证

TypeScript React中对象可能为null

如何解构可能为空的对象

回调中的对象可能为null

对象可能为空。TypeScript错误

WebStorm中不合理的“变量可能为空”警告

错误TS2531对象在角电抗形式中可能为空

如何解决与Gmail建立网络中的错误以及如何使电子邮件发件人?- Python

验证表单提交中的电子邮件

LINQ列表变量和列表中的数据可能为空

在 Angular2 中验证反应式表单字段的最佳方法是什么?

保证非空值时出现“对象可能为‘空’”错误消息

Angular 反应式表单:如何在对话框中显示验证错误?

如何验证此 PHP 联系表单中的电子邮件?

如何解决 TS 中的“对象可能为空”错误?

在 Ionic 的反应式表单中添加自定义验证时发生错误

如何在反应中清除电子邮件表单

Angular 中的反应式表单验证错误

对象在打字稿/角度中可能为“空”

对象可能在反应式 Angular 中为“空”

当参数可能为空时,R 中的语句

Angular - 动态 FormArray 中的对象可能为“空”

如何使用我的 formBuilder.group 中的两个组验证 Angular 10+ 中的反应式表单