Angular 2中的FormArray验证器

时间:2017-03-08 14:47:55

标签: forms validation angular

我在Angular 2中有4个formBuilder - 个人信息 - 地址信息 - 财务信息 - 合作伙伴信息

for Personal,Adress and Financy我有一个现成的验证器。

在合作伙伴方面,我有两个字段:'姓名'和'公司的百分比'。 在表单的这一部分,我有一个ArrayForm来添加多个合作伙伴,代码如下:

unresolved artifact. Not resolved or indexed.

我有一个自定义验证器来计算合作伙伴的百分比,它需要100%。(valPart())。

但是,如何在de function valPart()中访问数组portentagem的值?

valPart() - >

this.form4 = this.formBuilder.group({
            cadSocios: [{value: true, disabled: false}],

            socios: this.formBuilder.array([
                this.initSocios(),
            ])

        });


initSocios() {

        // initialize our address
        return this.formBuilder.group({
            nome: ['', Validators.required],
            participacao: ['', [Validators.required,
                Validators.pattern("[0-9]*")]]
        }, {validator: PartValidator.valPart()}));

    }

1 个答案:

答案 0 :(得分:0)

我明白了。 除非在initSocios()中调用valPart(),我在this.form4中调用它:

this.form4 = this.formBuilder.group({
            cadSocios: [{value: true, disabled: false}],

            socios: this.formBuilder.array([
                this.initAddress(),
            ])

        }, {validator: PartValidator.valPart()});

所以,我可以访问valPart()中的值:

   import {FormGroup} from '@angular/forms';

export class PartValidator{
    static valPart(){

        return (group: FormGroup): {[key: string]: any} => {

           let parts = [];
           let soma = 0;

           if(group.get('cadSocios').value == true){

            parts.push(group.get('socios').value);

            parts[0].forEach((data) => {
        soma += parseInt(data.participacao);
        });


        if(soma !== 100){

                return {
                    valPart: true
                }

        }//if

           }

            return null;
        }//return

    }//valPart

};