mat-error not displaying error message angular 5

Discussão em 'Angular' iniciado por chanakya sankritayana, Março 21, 2025.

  1. The problem is the error message is not getting displayed even if i leave the filed blank and move to another field. I am unable to find what i am doing wrong here. Any help would be highly appreciated. if i put a breakpoints on onFormValuesChanged() it never hits the breakpoints. i have tried moving the build part of form inside the constructor but don't have any impact. I am not sure if the form's value change event is triggered or not when field value is changed

    angular ver : - 5.2.1

    HTML Code

    <div>
    <form [formGroup]="formPersonalRecord">
    <mat-input-container class="full-width-input">
    <input matInput placeholder="First Name" formControlname="firstName">
    <mat-error *ngIf="formErrors.firstName.required">
    Please provide name.
    </mat-error>
    </mat-input-container>
    <mat-input-container class="full-width-input">
    <input matInput placeholder="Last Name" formControlname="lastName">
    </mat-input-container>
    <mat-input-container class="full-width-input">
    <input matInput placeholder="Father's Name" formControlname="fatherName">
    </mat-input-container>
    <mat-input-container class="full-width-input">
    <input matInput placeholder="Email" formControlname="email">
    <mat-error *ngIf="formErrors.email.required">
    Please provide a email name.
    </mat-error>
    </mat-input-container>
    </form>
    </div>


    component.cs

    import { Component, OnInit } from '@angular/core';
    import { EmployeePersonalRecord } from '../employee/employee-personal-record';
    import { FormBuilder, FormGroup, Validators } from '@angular/forms';
    import { fuseAnimations } from '../../core/animations';
    import { HrService } from '../hr.service';



    @Component({
    // tslint:disable-next-line:component-selector
    selector: 'app-add-employee',
    templateUrl: './add-employee.component.html',
    styleUrls: ['./add-employee.component.scss'],
    animations: fuseAnimations
    })

    export class AddEmployeeComponent implements OnInit {

    employeePersonalRecord: EmployeePersonalRecord = {} as EmployeePersonalRecord;
    public formPersonalRecord: FormGroup;
    formErrors: any;
    constructor(private builder: FormBuilder,
    private service: HrService) {
    }

    onFormValuesChanged()
    {
    for ( const field in this.formErrors )
    {
    if ( !this.formErrors.hasOwnProperty(field) )
    {
    continue;
    }
    // Clear previous errors
    this.formErrors[field] = {};
    // Get the control
    const control = this.formPersonalRecord.get(field);
    if ( control && control.dirty && !control.valid )
    {
    this.formErrors[field] = control.errors;
    }
    }
    }

    ngOnInit() {
    this.formPersonalRecord = this.builder.group({
    firstName: ['', Validators.required],
    lastName: ['', Validators.required],
    email: ['', Validators.required],
    fatherName: ['', Validators.required],
    dateOfBirth: ['', Validators.required],
    addressPermanent: ['', Validators.required],
    addressCurrent: ['', Validators.required],
    gender: ['', Validators.required],
    maritalStatus: ['', Validators.required],
    religion: ['', Validators.required],
    cast: ['', Validators.required]
    });

    this.formErrors = {
    firstName: {},
    lastName: {},
    email: {},
    fatherName: {},
    dateOfBirth: {},
    addressPermanent: {},
    addressCurrent: {},
    gender: {},
    maritalStatus: {},
    religion: {},
    cast: {}
    };
    this.formPersonalRecord.valueChanges.subscribe(() => {
    this.onFormValuesChanged();
    });
    }
    }

    Continue reading...

Compartilhe esta Página