响应式表单验证至少一个字段

Reactive forms validating at least one field

正在寻找一种方法来使用 angular 中的反应式表单来验证 2 个必填字段和十个其他字段中的至少一个 fields.So 我们有字段 1 和 2 是必需的,并且至少有一个必须选择 3 到 12。实现此目标的最佳方法是什么?

您可以将 3-12 放入一个表单组中,然后针对该表单组编写一个自定义验证程序。

这是我编写的自定义验证器示例,用于比较表单组中的 "email" 和 "confirm email" 元素:

function emailMatcher(c: AbstractControl): {[key: string]: boolean} | null {
    let emailControl = c.get('email');
    let confirmControl = c.get('confirmEmail');

    if (emailControl.pristine || confirmControl.pristine) {
      return null;
    }

    if (emailControl.value === confirmControl.value) {
        return null;
    }
    return { 'match': true };
 }

表单定义如下:

    this.customerForm = this.fb.group({
        firstName: ['', [Validators.required, Validators.minLength(3)]],
        lastName: ['', [Validators.required, Validators.maxLength(50)]],
        emailGroup: this.fb.group({
            email: ['', [Validators.required, Validators.pattern('[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+')]],
            confirmEmail: ['', Validators.required],
        }, {validator: emailMatcher}),
        phone: ''
    });

您可以执行类似的操作,将元素 3 - 12 放入表单组,然后编写分配给该组的自定义验证器。