如何将验证器添加到 angular 反应形式的 formModel

How to add validators to a formModel in angular reactive forms

我正在关注 angular 的反应式表单教程,并且想知道如何在使用 class 模型时将 属性 制作为 required 或任何其他验证器对于表单组定义。

https://angular.io/guide/reactive-forms#the-data-model-and-the-form-model

我注意到它创建了一个默认的空字符串作为初始值。为什么我不能定义没有默认值的地址模型——否则它会抛出错误?例如我不能说 street: string。我想从技术上讲,有一个默认值可以满足所需的验证——但这不是现实世界的用例。

理想情况下,我想定义没有默认值的 class 模型,并使地址和某些地址字段成为必填项。这可能使用反应式表单和表单模型吗?

export class Address {
  street = '';
  city   = '';
  state  = '';
  zip    = '';
}


this.heroForm = this.fb.group({
  name: ['', Validators.required ],
  address: this.fb.group(new Address()), // <-- How to make address and certain address fields required?
  power: '',
  sidekick: ''
});

您可以提供一个额外的对象来添加验证器或异步验证器(参见文档 here

this.heroForm = this.fb.group({
  name: ['', Validators.required ],
  address: this.fb.group(new Address(), { validator: Validators.required }), // <-- How to make address required?
  power: '',
  sidekick: ''
});

但在这种情况下,required 将不起作用,因为您的 "new Adress()" 是一个对象,因此不是 null 或 undefined。

您必须为您的地址创建自定义验证器 class

    const adressValidator = (fg: FormGroup) => {
         test = fg.value; 

         if (!test.street || !test.city || ... ) {
             return { adress: { valid : false }};
         }
    }

    and 

   this.heroForm = this.fb.group({
      name: ['', Validators.required ],
      address: this.fb.group(new Address(), { validator: adressValidator}), // <-- How to make address required?
      power: '',
      sidekick: ''
    });

希望对您有所帮助