【问题标题】:When submitting is done perfectly even if errors come out即使出现错误,提交也完美完成
【发布时间】:2020-04-30 02:29:44
【问题描述】:

我有一个表格,有最少字符和最多字符,问题是如果最小值是 2 个字符并且我放了一个字符,我会得到 mat-error 但是在保存时它让你只用一个字符保存它.

 <mat-form-field>
        <input matInput #input1 maxlength="300" minlength="2"
                placeholder="Nombre"
               formControlName="name">
        <mat-hint align="end">{{input1.value?.length || 0}}/300</mat-hint>
        <mat-error>
           Minimo 2 caracteres máximo 300
        </mat-error>
</mat-form-field>

保存按钮:

 <button  class="mat-raised-button mat-primary"  (click)="save()">Save</button>

保存功能:

    save() {
    this.dialogRef.close(this.form.value);
  }

https://stackblitz.com/edit/angular-jkjrsd-8flxvt

【问题讨论】:

  • 使用表单提交操作
  • 使用表单控件进行输入。
  • 我通过提交操作做到了,但它仍然不起作用

标签: angular modal-dialog mat-input mat-error


【解决方案1】:

验证应该在表单控制中。您必须从 HTML maxlength="300" minlength="2" 中删除并在表单组中设置表单验证,例如:

.ts

formGroup = new FormGroup({
    name: new FormControl('', [Validators.maxLength(300), Validators.minLength(2), Validators.required])
  });

.html

<form (ngSubmit)="onSubmit()" [formGroup]="formGroup">
    <mat-form-field>
        <input matInput #input1 placeholder="Nombre" formControlName="name">
        <mat-hint align="end">{{input1.value?.length || 0}}/300</mat-hint>
        <mat-error>
           Minimo 2 caracteres máximo 300
        </mat-error>
    </mat-form-field>
    <button type="submit" [disabled]="!formGroup.valid">Save</button>
</form>

【讨论】:

  • 即使输入正确,它也会一直处于停用状态
【解决方案2】:

使用表单提交

<form [formGroup]="form" (ngSubmit)="save()" class="example-form">
<mat-form-field>
    <input matInput #input1 maxlength="300" minlength="2"
            placeholder="Nombre"
           formControlName="name">
    <mat-hint align="end">{{input1.value?.length || 0}}/300</mat-hint>
    <mat-error>
        Minimo 2 caracteres máximo 300
    </mat-error>
</mat-form-field>
<button type="submit"> save</button>

component.ts

save(){
  if(this.form.valid){
  console.log('saved')
  }
  else{
     console.log('invalid form')
  }
}

示例stackblitz

【讨论】:

  • 我已经尝试过了,并在不验证的情况下继续向我发送表单
  • 刚刚使用示例 stackblitz 更新了代码。试试看告诉我
  • 真的吗?但它工作得很好,我已经更新了结果的截图。是的,您可以编辑 stackblitz 并在更改后对其进行分叉
  • stackblitz.com/edit/angular-jkjrsd-ycdfk1 看看这个例子。您已经提到了 id 属性的必需验证器,但它没有在 html 中的任何地方使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 2023-04-04
  • 2017-03-31
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多