简体   繁体   English

为什么Angular 8表单提交多次?

[英]Why Angular 8 form submitted multiple times?

I am new to angular.我是 angular 的新手。 I have a form like this:我有这样的表格:

<h2>Login</h2>
<form [formGroup]="loginForm" (ngSubmit)="onSubmit()">
    <div class="form-group">
        <label for="username">Username</label>
        <input type="text" formControlName="username" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.username.errors }" />
        <div *ngIf="submitted && f.username.errors" class="invalid-feedback">
            <div *ngIf="f.username.errors.required">Username is required</div>
        </div>
    </div>
    <div class="form-group">
        <label for="password">Password</label>
        <input type="password" formControlName="password" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.password.errors }" />
        <div *ngIf="submitted && f.password.errors" class="invalid-feedback">
            <div *ngIf="f.password.errors.required">Password is required</div>
        </div>
    </div>
    <div class="form-group">
        <button [disabled]="loading" class="btn btn-primary">
            <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
            Login
        </button>
    </div>
</form>

By clicking on the button, it submits the form multiple times.通过单击按钮,它会多次提交表单。

Why this is so?为什么会这样?

Any help appreciated任何帮助表示赞赏

Thanks谢谢

What are you expecting?你在期待什么? The onSubmit function will run each time you submit the form.每次提交表单时都会运行 onSubmit function。

If you only want it to submit if the form is valid then如果您只希望它在表单有效的情况下提交,那么

(ngSubmit)="f.valid && onSubmit()"

or if you only want it to submit once have a submitted flag或者如果你只希望它提交一次有一个提交的标志

(ngSubmit)="!submitted && onSubmit()"

and on the component并在组件上

submitted = false;
onSubmit() {
  this.submitted = true;
}

Remove the (ngSubmit)="onSubmit()" from the form and add a Click event on your button like this:从表单中删除(ngSubmit)="onSubmit()"并在您的按钮上添加一个Click event ,如下所示:

<button [disabled]="loading" class="btn btn-primary" (click)="onSubmit()">
  <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
  Login
</button>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM