首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我的自定义错误inside mat-error没有显示在DOM中

我的自定义错误inside mat-error没有显示在DOM中
EN

Stack Overflow用户
提问于 2020-04-22 04:30:58
回答 1查看 16关注 0票数 0

我正在尝试验证登录表单并检查电子邮件是否有效(我想阻止一些10分钟的电子邮件),所以与无效电子邮件模式的mat-errors一起,我想显示电子邮件无效或真实的错误。

我有一个应用程序接口,所以我发送电子邮件到服务器,它返回我的响应,真或假,我试图显示另一个mat-error,而不是默认的,但被卡住了。我读过有关ErrorStateMatchers的文章,但我不知道如何在内部集成我的应用程序接口服务。你能帮我吗?或者给我一些提示。

这是我的html模板:

代码语言:javascript
代码运行次数:0
运行
复制
<mat-form-field class="form-input">
  <div class="input-wrapper">
    <span class="material-icons">person</span>
    <input matInput class="input" type="email" name="email" (blur)="validateEmail()" formControlName="email"
      [readonly]="disabledForm">
  </div>

  <mat-error class="input-error" *ngIf="loginForm.get('email').touched && formErrorsText['email']" translate>
    {{ formErrorsText['email'] }}
  </mat-error>

  <mat-error class="input-error" *ngIf="!(validEmail$ | async)">
    {{ 'AUTH.LOGIN.INVALID_EMAIL'| translate }}
  </mat-error>
</mat-form-field>

基本上如果我替换掉

代码语言:javascript
代码运行次数:0
运行
复制
<mat-error class="input-error" *ngIf="!(validEmail$ | async)">
  {{ 'AUTH.LOGIN.INVALID_EMAIL'| translate }}
</mat-error>

使用

代码语言:javascript
代码运行次数:0
运行
复制
<div class="input-error" *ngIf="!(validEmail$ | async)">
  {{ 'AUTH.LOGIN.INVALID_EMAIL'| translate }}
</div>

它已经被展示过了,但是我想知道为什么我不能使用mat-error

这是我的apiService

代码语言:javascript
代码运行次数:0
运行
复制
validateEmail(): void {
 if (this.loginForm.valid) {
   this.validEmail$ = this.emailValidationService.checkEmail(this.loginForm.get('email').value)
    .pipe(map(response => !response?.trust_rate || response?.trust_rate < 50));
 }
}
EN

回答 1

Stack Overflow用户

发布于 2020-04-22 05:06:33

在您的validateEmail()方法中,您可以执行如下操作

代码语言:javascript
代码运行次数:0
运行
复制
validateEmail(): void {
 if (this.loginForm.valid) {
   this.emailValidationService.checkEmail(this.loginForm.get('email').value)
       .subscribe(response => {
         //Apply your checks, if invalid then
         this.loginForm.get('email').setErrors({serverError: 'Your Error'});
       });

在你的模板中,

代码语言:javascript
代码运行次数:0
运行
复制
<mat-error *ngIf="form.get('email').errors?.serverError">
   {{ form.get('email').errors?.serverError }}
</mat-error>

mat-error似乎与它所在的<form-field>的状态有关,因此在表单域上设置错误会正确地标记该域是脏的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61352673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档