2017-02-15 3 views
0

Почему я получаю эту ошибку Не могу прочитать свойство, затронутое undefined?Невозможно прочитать свойство 'touched' of undefined

Почему он не умеет читать formName.controls['email'].touched, но его возможность читать formName.get('custDetails').touched

<form [formGroup]="formName"> 
<fieldset formGroupName="custdetails"> 
    <div class="form-group" [ngClass]="{'has-error': formName.controls['email'].touched 
       && formName.controls['email'].hasError('invalidEmailAddress')}"> 
     <label class="control-label">Email</label> 
     <input type="text" class="form-control" 
       formControlName="email" name="email" required /> 
    </div> 
</fieldset>   

</form> 

Когда мы используем formName.get('custdetails.email').touched ... я получаю ниже ERRO

TypeError: _this.subscribe is not a function at eval (http://localhost:3000/node_modules/rxjs/operator/toPromise.js:68:15) at new ZoneAwarePromise (http://localhost:3000/node_modules/zone.js/dist/zone.js:551:29) at Object.toPromise (http://localhost:3000/node_modules/rxjs/operator/toPromise.js:66:12) at _convertToPromise (http://localhost:3000/node_modules/@angular/forms//bundles/forms.umd.js:541:73) at Array.map (native) at FormControl.eval [as asyncValidator] (http://localhost:3000/node_modules/@angular/forms//bundles/forms.umd.js:530:101) at FormControl.AbstractControl._runAsyncValidator (http://localhost:3000/node_modules/@angular/forms//bundles/forms.umd.js:2670:62) at FormControl.AbstractControl.updateValueAndValidity (http://localhost:3000/node_modules/@angular/forms//bundles/forms.umd.js:2630:26) at FormControl.setValue (http://localhost:3000/node_modules/@angular/forms//bundles/forms.umd.js:2988:18) at DefaultValueAccessor.eval [as onChange] (http://localhost:3000/node_modules/@angular/forms//bundles/forms.umd.js:1658:21) at Wrapper_DefaultValueAccessor.handleEvent (/InternalFormsSharedModule/DefaultValueAccessor/wrapper.ngfactory.js:29:34) at CompiledTemplate.proxyViewClass.View_ReactiveFormComponentFive0.handleEvent_36 (/AppModule/ReactiveFormComponentFive/component.ngfactory.js:717:45) at CompiledTemplate.proxyViewClass.eval (http://localhost:3000/node_modules/@angular/core//bundles/core.umd.js:12397:41) at HTMLInputElement.eval (http://localhost:3000/node_modules/@angular/platform-browser//bundles/platform-browser.umd.js:3224:57) at ZoneDelegate.invokeTask (http://localhost:3000/node_modules/zone.js/dist/zone.js:275:35)

Ниже, как моя форма строительство:

ngOnInit() { 
    this.formName = this.fb.group({ 
     name: ["", [Validators.required]], 
     custdetails: this.fb.group({ 
      email: ["", Validators.required, ValidationHelper.emailValidator], 
      confirm: ["", Validators.required] 
     }, { 
      validator: ValidationHelper.emailMatcher 
     }) 

    }) 
} 

И мой адрес электронной почты valida тор:

static emailValidator = (control: AbstractControl) : {[key: string]: boolean} =>{ 
     // RFC 2822 compliant regex 
     if (control.value.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/)) { 
      return null; 
     } else { 
      return { 'invalidEmailAddress': true }; 
     } 
    } 

ответ

3

полный путь к полю является:

formName.get('custdetails.email') 

Таким образом, вы должны получить доступ к:

formName.get('custdetails.email').touched 

Кроме того, у Вас есть ошибка в модели формы. Когда несколько валидаторов применяются к одной и той же области, что они должны быть обернуты внутри массива:

// Replace that: 
email: ["", Validators.required, ValidationHelper.emailValidator] 
// With this: 
// Notice the additional [ ] around the validators 
email: ["", [Validators.required, ValidationHelper.emailValidator]] 

Путем пропускания двух валидаторов в виде отдельных параметров, Угловой интерпретирует второй валидатор emailValidator как асинхронный валидатор и пытается подписаться на него. Следовательно, сообщение об ошибке «this.subscribe не является функцией».

+0

Я получаю сообщение об ошибке .... TypeError: _this.subscribe не является функцией ... проверьте мой обновленный пост – Shane

+0

Возможно, проблема заключается в декларации модели модели. Можете ли вы показать код для формы ** model ** (т. Е. Что у вас есть в вашем классе)? – AngularChef

+0

Обновили сообщение .... – Shane

Смежные вопросы