我使用带有@angular/material
版本2.0.0-beta.10
的Angular 4反应表单。我需要以编程方式显示md-error
消息。
在必填字段上,当用户在未输入任何文字的情况下离开输入时,我有md-error
表示,"此字段是必填字段。"见代码:
<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>
我试过了两个:
this.formGroup.markAsTouched();
this.formGroup.markAsDirty();
当我致电md-error
或<input>
时,markAsTouched()
下方的markAsDirty()
文字未显示。
如何以编程方式触发触摸状态,以便显示错误消息?
答案 0 :(得分:4)
更好的解决方案可能是使用custom error matcher。
以下是使用类属性决定何时应显示错误的示例:http://plnkr.co/edit/U5xtdKWggcbgU2EHKkK9?p=preview
<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;
}
此外,您可以将其配置为全局使用相同的行为。以下是无效控件脏时显示错误的示例:http://plnkr.co/edit/gcQuzYChrl5d7UYXo8eS?p=preview
import {MD_ERROR_GLOBAL_OPTIONS, showOnDirtyErrorStateMatcher} from '@angular/material';
@NgModule({
providers: [
{provide: MD_ERROR_GLOBAL_OPTIONS, useValue: {errorStateMatcher: showOnDirtyErrorStateMatcher}}
]
})
答案 1 :(得分:1)
解决方案是遍历每个控件并将每个控件标记为触摸:
Object.keys(this.formGroup.controls).forEach(key => {
const ctrl = this.formGroup.get(key);
ctrl.markAsTouched({ onlySelf: true });
});