0

I have an angular date picker within a reactive form with a required validator. The problem is that it is always not valid, even when a date is picked. Strangely the control does not display red when it is invalid. Do I need to do some manual css rules for this? HTML and Typescript below. A stackblitz of the issue is here https://stackblitz.com/edit/angular-ewa1kj-vv5baj?file=app/input-error-state-matcher-example.ts

I've tried with a without an errorStateMatcher on the date picker -- same result

Thanks

Pete

HTML:

    <form [formGroup]="ticketForm" class="example-form" (ngSubmit)="submitForm()">
  <div formGroupName="systemForm">
    <div fxLayout="column" fxLayoutAlign="left center" fxLayoutGap="15px">
      <mat-label>Lateral: *</mat-label>
      <mat-radio-group name="lateral" required formControlName="lateral">
        <mat-radio-button value=1>Yes</mat-radio-button>
        <mat-radio-button value=2>No</mat-radio-button>
      </mat-radio-group>
      <mat-form-field appearance="outline">
        <mat-label>Mark Date</mat-label>
        <input matInput [matDatepicker]="pickerMarkDate" required [errorStateMatcher] = matcher>
        <mat-datepicker-toggle matSuffix [for]="pickerMarkDate"></mat-datepicker-toggle>
        <mat-datepicker #pickerMarkDate></mat-datepicker>
      </mat-form-field>
    </div>
  </div>
/*same result with and without the errorStateMatcher*/
      <button type="submit" mat-stroked-button>Submit</button>
    </form>

TypeScript:

export class InputErrorStateMatcherExample {
  @Input() markDateValid: string;
  @Input() lateralValid: string;
  ticketForm = new FormGroup({
    systemForm: new FormGroup({
      lateral: new FormControl('', [Validators.required]),
      pickerMarkDate: new FormControl('', [Validators.required])
    })
  });

  matcher = new MyErrorStateMatcher();
  submitForm() {
    this.markDateValid = this.ticketForm.get('systemForm').get('pickerMarkDate').valid.toString();//always false
    console.log(this.ticketForm.get('systemForm').get('pickerMarkDate').errors);
    this.lateralValid = this.ticketForm.get('systemForm').get('lateral').valid.toString();
    console.log(this.ticketForm.get('systemForm').get('lateral').errors);
  }
}

1 Answer 1

1

You must add the formControlName directive to link to your formGroup:

<input formControlName="pickerMarkDate" matInput [matDatepicker]="pickerMarkDate">
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.