Cannot access the parent formControl object changes in a Parent-Child Component relationship in Angular 8

1.4k Views Asked by At

I have created a parent component as follows:

<form [formGroup] = "cardForm">
<app-inputvalidator [controls] = "cardForm.get('name')"></app-inputvalidator>  
</form>

Parent ts file

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormControl,Validators } from '@angular/forms';

@Component({
  selector: 'app-card-form',
  templateUrl: './card-form.component.html',
  styleUrls: ['./card-form.component.css']
})

export class CardFormComponent implements OnInit {
  nameFormControl ;

   cardForm =  new FormGroup({
    name: new FormControl('', [Validators.minLength(5),Validators.maxLength(25)])
  });



  constructor() {
   }

 ngOnInit(): void {
     this.nameFormControl = this.cardForm.get('name');
            }

}

I am passing the nameFormControls to the child component and accessing it in the template as well as class as follows:

InputValidator.ts

 import { Component, OnInit, Input } from '@angular/core';
 import { FormControl} from '@angular/forms';

 @Component({
  selector: 'app-inputvalidator',
  templateUrl: './inputvalidator.component.html',
  styleUrls: ['./inputvalidator.component.css']
})
 export class InputvalidatorComponent implements OnInit {
 @Input() controls: FormControl;

 constructor() {

 }

 ngOnInit(): void {
 }

}

Input Validator.html

  <input [formControlName] = "controls"  
  <br>
  <div>{{ controls.errors | json}}</div> 

The project is compiled successfully with no errors.

I am getting the value of controls.errors to always null. Why can I not print the object controls.errors using string interpolation as the value in the name input box changes?

1

There are 1 best solutions below

4
Muhammed Albarmavi On BEST ANSWER

you get null becuase you don't put required validator the min,maxLength validators will return an error if there is value and the value is not valid , if the value is null or empty string this will consider a valid

check the validator source