【问题标题】:Need to show the error message in mat errror based on the if condition in component需要根据组件中的if条件在mat errror中显示错误信息
【发布时间】:2020-04-26 22:29:19
【问题描述】:

我想根据组件中的if条件在mat error中显示错误信息。

export class EditMaterialComponent implements OnInit {

  public quantityRemaining:any;
  public editMaterialForm = new FormGroup({
    count: new FormControl(''),
    suppliedTo: new FormControl('')
  })
  public errormatcher = new MyErrorStateMatcher();
  constructor(private dialogRef: MatDialogRef<EditMaterialComponent>,@Inject(MAT_DIALOG_DATA) public dialogData: any,private inventoryMngService:InventoryMngService) { }

  ngOnInit() {
    console.log(this.dialogData);

  }


  /** CLOSE mat dialog **/
  close() {
    this.dialogRef.close(null);
  }
  updateQuantity(){

    this.dialogData.count = this.dialogData.count - this.editMaterialForm.value.count;
    this.dialogData.comment = this.editMaterialForm.value.suppliedTo;
    if(this.editMaterialForm.valid){
     this.inventoryMngService.updateICase(this.dialogData).subscribe(res=>{
       console.log(res);
       this.close();
      },err=>{
        console.log(err);
      })
    }

}
}

updateQuantity()中,如果this.editMaterialForm.value.count &gt; this.dialogData.count需要在&lt;mat-error&gt;&lt;/mat-error&gt;中显示错误。 谁能帮我解决这个问题?

【问题讨论】:

  • 您有THIS 线程,它可能对您的情况有所帮助。

标签: angular angular6 mat-error


【解决方案1】:

您可以像这样使用自定义验证器:

export const validateCondition = (condition: (control: AbstractControl) => boolean, errorString: string): ValidatorFn => 
  (control: AbstractControl): ValidatorErrors =>
  (condition(control) ? null : { [errorString]: { value: control.value } });

你可以这样使用它:

editMaterialForm = new FormGroup({
  count: new FormControl('', [validateCondition(control => control.value > this.dialogData.count, 'myCustomError')]),
  suppliedTo: new FormControl('')
})

然后在你的 HTML 中:

<mat-error *ngIf="FormControl.hasError('myCustomError')">message</mat-error>

【讨论】:

  • 它不起作用兄弟,我们没有为 html 中的错误传递值
  • @ajay 对不起,我不明白。你能解释更多吗?
  • ,myCustomError 未定义
  • @ajay 一个原因可能是您更改了this.dialog.count 并且您不会重新验证formControl。更改this.dialog.count后需要调用this.editMaterialForm.get('count').validate()
  • 我使用 div 标签本身来显示基于标志的错误。无论如何谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-02-15
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多