仅当在Angular中的表单中输入数据时才提交表单

伊尚·ja那

我创建了一个用于从用户获取数据的简单表单,我想仅在输入字段之一中包含数据的情况下才激活提交按钮。这是我的代码:

HTML:

`合同号

<mat-form-field>
  <mat-label>Instance No.</mat-label>
  <input matInput id="instanceno" placeholder="" name="instanceno" formControlName="instanceno">
    </mat-form-field>
    <div *ngIf="form.get('instanceno').hasError('pattern')" class="error">Only Numeric Value Allowed
   </div>
    <br>

    <mat-form-field>
    <mat-label>Serial No.</mat-label>
    <input matInput id="serialno" placeholder=""name="serialno" formControlName="serialno">
    </mat-form-field>
    <br>

    <mat-form-field>
      <mat-label>Customer No.</mat-label>
      <input matInput id="customerno" name="customerno" placeholder="" formControlName="customerno">
    </mat-form-field>
     <br>

  <button mat-button type="submit" [disabled]="!form.valid" matDialogClose >Submit</button>
  <button mat-button mat-dialog-close>Cancel</button>

`

TS:

this.form = new FormGroup({
    contractno: new FormControl(''),
    serialno: new FormControl(''),
  instanceno: new FormControl('', Validators.pattern('[0-9]*')),
    customerno: new FormControl('')
  });
库尔特·汉密尔顿

我的解决方法是将表单控件存储在一个结构中,该结构使每次表单更改时检查其值变得简单。

与其内联构建表单,不如将表单控件本身存储在单独的变量中。

form: FormGroup;

private formControls: {
  contractno: FormControl;
  serialno: FormControl;
  instanceno: FormControl;
  customerno: FormControl;
};
private formControlsArray: FormControl[];

ngOnInit() {    
  this.formControls = {
    contractno: new FormControl(''),
    serialno: new FormControl(''),
    instanceno: new FormControl('', Validators.pattern('[0-9]*')),
    customerno: new FormControl('')
  };

  this.formControlsArray = Object.keys(this.formControls)
    .map(key => this.formControls[key]);

  this.form = new FormGroup(this.formControls);
}

然后订阅表单值更改,每次表单更改时都要检查表单控件数组中是否存在有效值。

hasValue = false;
private destroyed$ = new Subject();

ngOnInit() {    
  // build the form here

  this.form.valueChanges.pipe(
    takeUntil(this.destroyed$)
  ).subscribe(() => {
    this.hasValue = this.formControlsArray.some(x => x.value.length > 0);
  });
}

ngOnDestroy() {
  this.destroyed$.next();
}

然后,您可以将按钮的disabled状态绑定hasValue属性。

<form [formGroup]="form">
  <!-- the form -->
  <button [disabled]="!hasValue">
    Submit
  </button>
</form>

因此,如果您想加强值检查,例如仅将非空白值视为有效,则只需更新此功能即可。

演示:https : //stackblitz.com/edit/form-array-template-fxxvir

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅当在Laravel 5.2中输入字段时才验证

来自分类Dev

清除Angular表单提交中的输入字段?

来自分类Dev

在提交表单之前,显示在表单中输入的数据

来自分类Dev

仅当数据库中没有信息时才显示表单字段

来自分类Dev

如何在表单中仅提交1个输入字段?

来自分类Dev

获取数据框的唯一值以用于选择输入选择,但仅当在server.ui中定义该数据框时才全局

来自分类Dev

仅当表单输入存在时才显示ShowModal

来自分类Dev

仅当每个输入都为空时才验证表单

来自分类Dev

在AngularJS中输入ng-change时如何提交表单

来自分类Dev

防止输入为空时提交(不在表单中)

来自分类Dev

仅当在Django admin中更新用户时输入密码时才更新密码

来自分类Dev

div中的表单输入无法提交

来自分类Dev

从输入中追加文本并提交表单

来自分类Dev

如何提交表单中的禁用输入元素?

来自分类Dev

在母版页中输入以提交不同的表单

来自分类Dev

提交表单时如何仅验证表单?

来自分类Dev

提交表单时输入被排除

来自分类Dev

在网页中输入表单数据时更新绘图

来自分类Dev

提交表单时在节点js中获取表单数据:未定义错误

来自分类Dev

Javascript / JQuery:提交表单时,请勿重新加载整页(仅div),而仍提交表单数据

来自分类Dev

在div中显示提交的表单数据

来自分类Dev

提交后在Angular 2中重置表单

来自分类Dev

Angular2.0中的表单提交

来自分类Dev

Angular 2中的表单提交状态标志

来自分类Dev

仅当已选中特定数量的复选框时,才自动提交表单

来自分类Dev

仅当条款和条件签出时才提交Stripe自定义表单

来自分类Dev

MS Access-在表单中输入的数据在我关闭表单时自动保存

来自分类Dev

React 中的表单提交

来自分类Dev

如何在提交时仅重置表单中的一个字段

Related 相关文章

  1. 1

    仅当在Laravel 5.2中输入字段时才验证

  2. 2

    清除Angular表单提交中的输入字段?

  3. 3

    在提交表单之前,显示在表单中输入的数据

  4. 4

    仅当数据库中没有信息时才显示表单字段

  5. 5

    如何在表单中仅提交1个输入字段?

  6. 6

    获取数据框的唯一值以用于选择输入选择,但仅当在server.ui中定义该数据框时才全局

  7. 7

    仅当表单输入存在时才显示ShowModal

  8. 8

    仅当每个输入都为空时才验证表单

  9. 9

    在AngularJS中输入ng-change时如何提交表单

  10. 10

    防止输入为空时提交(不在表单中)

  11. 11

    仅当在Django admin中更新用户时输入密码时才更新密码

  12. 12

    div中的表单输入无法提交

  13. 13

    从输入中追加文本并提交表单

  14. 14

    如何提交表单中的禁用输入元素?

  15. 15

    在母版页中输入以提交不同的表单

  16. 16

    提交表单时如何仅验证表单?

  17. 17

    提交表单时输入被排除

  18. 18

    在网页中输入表单数据时更新绘图

  19. 19

    提交表单时在节点js中获取表单数据:未定义错误

  20. 20

    Javascript / JQuery:提交表单时,请勿重新加载整页(仅div),而仍提交表单数据

  21. 21

    在div中显示提交的表单数据

  22. 22

    提交后在Angular 2中重置表单

  23. 23

    Angular2.0中的表单提交

  24. 24

    Angular 2中的表单提交状态标志

  25. 25

    仅当已选中特定数量的复选框时,才自动提交表单

  26. 26

    仅当条款和条件签出时才提交Stripe自定义表单

  27. 27

    MS Access-在表单中输入的数据在我关闭表单时自动保存

  28. 28

    React 中的表单提交

  29. 29

    如何在提交时仅重置表单中的一个字段

热门标签

归档