Angular 角材质以编程方式触发接触状态

Angular 角材质以编程方式触发接触状态,angular,angular-material2,Angular,Angular Material2,我使用的是Angular 4反应形式和@Angular/material版本2.0.0-beta.10。我需要以编程方式显示md error消息 在必填字段上,当用户在没有输入任何文本的情况下离开输入时,我有一个md错误,表示“此字段为必填字段”。请参阅代码: <md-form-field> <input mdInput type="text" formControlName="PartNumber" placeholder=

我使用的是Angular 4反应形式和
@Angular/material
版本
2.0.0-beta.10
。我需要以编程方式显示
md error
消息

在必填字段上,当用户在没有输入任何文本的情况下离开输入时,我有一个
md错误
,表示“此字段为必填字段”。请参阅代码:

<md-form-field>
    <input mdInput type="text"
           formControlName="PartNumber"
           placeholder="Part Number"
           maxlength="250"
           required />
    <md-error *ngIf="formGroup.controls['PartNumber'].hasError('required')">
        Part Number is <strong>required</strong>
    </md-error>
</md-form-field>
调用
markAsTouched()
markAsDirty()
时,
下面的
md错误文本不会出现


如何以编程方式触发触摸状态以显示错误消息?

解决方案是循环遍历每个控件并将每个控件标记为触摸:

Object.keys(this.formGroup.controls).forEach(key => {
    const ctrl = this.formGroup.get(key);
    ctrl.markAsTouched({ onlySelf: true });
});

一个更好的解决方案可能是使用

下面是一个使用类属性决定何时显示错误的示例:

Object.keys(this.formGroup.controls).forEach(key => {
    const ctrl = this.formGroup.get(key);
    ctrl.markAsTouched({ onlySelf: true });
});
<md-form-field>
  <input mdInput [formControl]="myInput" placeholder="My Input" [errorStateMatcher]="showWhenISayTo">
  <md-error>Field is required</md-error>
</md-form-field>


// Set this to `true` to show the errors
showError = false;

myInput = new FormControl('', Validators.required)

showWhenISayTo = () => {
  return this.showError;
}
import {MD_ERROR_GLOBAL_OPTIONS, showOnDirtyErrorStateMatcher} from '@angular/material';

@NgModule({
  providers: [
    {provide: MD_ERROR_GLOBAL_OPTIONS, useValue: {errorStateMatcher: showOnDirtyErrorStateMatcher}}
  ]
})