angular - Angular Material ErrorStateMatcher 可以检测父表单何时提交吗?

标签 angular angular-material angular-forms

我有一个父组件,它设置一个表单并将其传递给子组件。

<form [formGroup]="form" (submit)="submit()">
  <app-child [form]="form"></app-child>
  <button mat-button type="submit">Submit</button>
</form>

子组件显示如下输入字段:

<mat-form-field *ngIf="form" [formGroup]="form">
  <input matInput
         placeholder="Email"
         formControlName="email"
         [errorStateMatcher]="matcher"
         required>
</mat-form-field>

输入字段是必需的,如果在未填写的情况下提交表单,即使用户从未接触过它,也应该显示错误。这是简单表单中的自动行为,但是(我认为)由于我使用的是子表单,我必须使用 ErrorStateMatcher 实现自定义错误逻辑。

export class MyErrorStateMatcher implements ErrorStateMatcher {
  isErrorState(control, form) {
    return control && control.invalid && form && form.submitted;
  }
}

但是,这不起作用。我不知道如何让子输入来检测父表单何时提交。 ErrorStateMatcher 检测到某些内容已发生更改,但 formsubscribed 属性始终为 false。我做错了什么?

See this Stackblitz

最佳答案

您不需要实现 ErrorStateMatcher 来实现此类行为。在 mat-form-field

上使用 formGroup 是没有意义的

只需更改 child.component.html 如下

<mat-form-field *ngIf="form">
  <input matInput placeholder="Email" [formControl]="form.get('email')">
</mat-form-field>

这是一个工作示例 https://stackblitz.com/edit/angular-material-error-matcher-child-component-6nwmwe

关于angular - Angular Material ErrorStateMatcher 可以检测父表单何时提交吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56584244/

相关文章:

angular - 如何在 Angular 8 中未调用的组件之间传递数据

angular - 使用mat-select组件设置默认选中选项的正确方法

javascript - Angular Material ,当添加波纹时它会填充而不是消失

angular - 如何有效管理表单上的两类控件?

angular - 订阅 Angular react 形式的输入错误

javascript - Angular2 - 如何在(点击)或(routerLink)之前触发事件

angular - 为什么响应式primeng表中不显示表头?

javascript - Angular 2 编译失败

angular - 展开和折叠 Angular Material 中的表格行

Angular 2 不仅仅是文本区域中的空格