gat*_*pia 11 angular2-forms angular
如果我使用button type="submit"表单提交表单验证消息出现,一切都很好.但是,如果我有一个按钮(或链接),(click)="myhandler()"则不会出现验证.
我怎么能:
注意:这些是输入字段所需的简单验证.
示例代码:
<form (ngSubmit)="save()">
<input required type='text' [(ngModel)]="name">
<!-- Shows validation messages but still calls save() -->
<button (click)="save()">Click</button>
<!-- Only submits if valid and shows messages -->
<button type="submit">Submit</button>
</form>
<!-- does not even show validation messages, just calls save -->
<button (click)="save()">Click 2</button>
Run Code Online (Sandbox Code Playgroud)
小智 7
请注意:此方法适用于被动形式.
我使用markAsTouched()属性在按钮单击上运行验证.
假设以下按钮在表单之外:
<button type="button" (click)="validateForm()">Submit</button>
Run Code Online (Sandbox Code Playgroud)
现在,在validateForm表单中,如果表单无效,您可以markAsTouched()为每个表单控件设置属性,而angular将显示验证消息.
validateForm() {
if (this.myformGroup.invalid) {
this.myformGroup.get('firstName').markAsTouched();
this.myformGroup.get('surname').markAsTouched();
return;
}
// do something else
}
Run Code Online (Sandbox Code Playgroud)
如果您在html中设置验证消息,请参阅
<mat-error *ngIf="myformGroup.get('firstName').hasError('required')">
first name is required
</mat-error>
Run Code Online (Sandbox Code Playgroud)
并且您需要在表单组构建器中设置字段验证设置
firstName: ['', Validators.required]
Run Code Online (Sandbox Code Playgroud)
带有提交类型的按钮会自动触发表单提交,我想您必须手动触发表单提交:
<form (ngSubmit)="save()" #form="ngForm">
<button (click)="form.onSubmit()">Click 2</button>
Run Code Online (Sandbox Code Playgroud)
为什么是“ngForm”?指令的 exportAs 属性告诉 Angular 如何将局部变量链接到指令。我们将 name 设置为 ngForm,因为 NgControlName 指令的 exportAs 属性恰好是“ngForm”。