【发布时间】:2018-09-07 19:31:58
【问题描述】:
我想通过Angular 5提交一个小表单。表单中有一个文件上传字段。在 .ts 文件中,我已经导入了 ngForm 如下
import { NgForm } from '@angular/forms';
出于测试目的,我只是在表单提交方法中放置了一个控制台文本,如下所示:
onSubmit(form : NgForm) {
console.log("form submitted !");
}
html视图中的表单如下:
<form method="post" (ngSubmit)="mydocumentFrm.form.valid && onSubmit(mydocumentFrm)" #mydocumentFrm="ngForm">
<input class="form-control-file border" type="file" id="filename" required ngModel name="filename" #filename="ngModel">
<small class="form-text text-muted">(Image, PDF or Word doc)</small>
<div *ngIf="mydocumentFrm.submitted && filename.invalid" class="invalid-feedback">
<div *ngIf="filename.errors.required">Field is required</div>
</div>
<div class="form-group">
<button class="btn btn-secondary" type="submit">Upload</button>
</div>
</form>
如果我没有选择任何文件,或者当我通过选择图像文件单击提交按钮时,我发现表单没有经过验证,控制台文本没有出现。但是,控制台屏幕上没有发生错误。
【问题讨论】:
-
逻辑
&&的第二个条件如果首先计算为false,则不会执行。这就是原因,onSubmit()在表单出现错误时不会触发。您的情况非常好,请仅在表单为valid时调用onSubmit。 -
你试过
reactive form而不是Template-driven吗? -
@ShashikantDevani 为什么需要响应式表单?
-
使用响应式表单,您可以轻松归档验证。
-
@AmitChigadani 我尝试省略第一个条件 mydocumentFrm.form.valid 并实现 *ngIf="filename.hasError('required')" 但是,提交的表单没有上传文件。有什么建议吗?