首页 > 解决方案 > Angular 7. 第一次不要检查反应形式的验证

问题描述

在 Angular 7 中,我有以下代码:

    this.formGroup = this.formBuilder.group({
      id: [],
      name: ['', [Validators.required], this.validateSomething.bind(this)],
    });

然后我做了一些事情,最后我用从我的数据库获得的对象初始化值,myObject我知道它不会破坏任何验证:

    this.formGroup.setValue({
      id: myObject.id,
      name: myObject.name
    }, {
      emitEvent: false
    });

validateSomething的非常复杂,我希望这样,在我最初的setValue时候它没有运行以节省一些计算。

我找到了这个功能setValidators(),我想我可以做类似的事情:

    this.formGroup = this.formBuilder.group({
      id: [],
      name: ['', [Validators.required]],
    });
    this.formGroup.setValue({
      id: myObject.id,
      name: myObject.name
    }, {
      emitEvent: false
    });
this.formGroup.controls.name.setValidator(validateSomething.bind(this));

但它不起作用。验证根本不再起作用。

任何的想法?谢谢!

标签: angularangular-reactive-forms

解决方案


在您的验证方法validateSomething中,您可以检查该字段是否是touched和/或dirty在验证之前。

就像是:

this.myForm.get('name').touched && this.myForm.get('name').dirty.


推荐阅读