Angular 2.如何从外部ControlGroup正确获取内部ControlGroup?

时间:2016-06-11 22:48:58

标签: angular

我有以下代码,验证注册表单并添加错误消息,如果输入的数据无效:

this.registerForm = _fb.group({
        // email: new Control(this.registerContact.email,
        //         Validators.compose([Validators.required, Validators.minLength(4)])),
        emails:_fb.group({
            email: new Control(this.registerContact.email,
                Validators.compose([Validators.required, Validators.minLength(4)])),
        }),

        passwords:_fb.group({
                            password: new Control(this.registerContact.password,
                Validators.compose([Validators.required, Validators.minLength(8)])),
                            repeat_password: new Control(this.registerContact.repeat_password,
                Validators.required)},{
                            validator:checkRepeatPassword})
    });

我需要从 this.registerForm <获取 密码 repeat_password / em> 。 现在我使用以下代码:

...
 onValueChanged(data: any) {
    for (let fields in this.formError) {
        // console.log('fields: '+fields);
        for(let field in this.formError[fields]){

            //  console.log('      field: '+field);
        if (this.formError.hasOwnProperty(fields)) {

            let innerContol = this.registerForm.controls[fields].controls[field];

            let hasError = innerContol.dirty &&!innerContol.valid;
                console.log('hasError?:'+hasError)
            this.formError[fields][field] = '';
            if (hasError) {

                for (let key in innerContol.errors) {
                       if(field=='repeat_password'){
                    // console.log('repat_error:'+key)
                }

                    if (innerContol.errors.hasOwnProperty(key)) {
                        console.log('   >>>outer repeat_password error!'+innerContol.value);    

                        this.formError[fields][field] += this._validationMessages[field][key] + ' ';
                         console.log('   >>>add follow errorMessage:'+this._validationMessages[field][key]); 
                    }
                }
            }
        }
    }
}

所以,这是有效的,但我在这个方法中有红色下划线

  

让innerContol = this.registerForm.controls [fields]。 controls [field];

警告: 属性'控件'在“AbstractControl”类型上不存在

也许有更好的方式来获取 密码 repeat_password

有一个指向github的链接:

https://github.com/ProximaHaiz/Angular_2_book_library/blob/master/app_ts/registration/registration.component.ts

1 个答案:

答案 0 :(得分:0)

Plunker example

this.registerForm.controls.passwords.controls.password;