Reputation: 815
Hi i have tried to do reactive form validation in angular 11 but its showing following error in terminal.
error TS2531 object is possibly null.
my code in signup.component.ts
import {FormGroup, FormControl, Validators} from '@angular/forms';
form = new FormGroup({
firstName: new FormControl('',Validators.required)
})
get f()
{
return this.form.controls;
}
in signup.component.html
<form role="form" [formGroup]="form">
<div class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control" formControlName="firstName" [ngClass]="{'is-invalid':form.get('firstName').touched && form.get('firstName').invalid}">
<div *ngIf="f.firstName.touched && f.firstName.invalid">
<small class="text-danger" *ngIf="f.firstName.errors.required">
Name is required!
</small>
</div>
</div>
</form>
when i run its showing error in
<small class="text-danger" *ngIf="f.firstName.errors.required"> Name is required!
error TS2531 object is possibly null.
Upvotes: 30
Views: 79291
Reputation: 1645
You can also use 'non-null assertion operator' which is used if the typescript compiler complains about a value being null or undefined , you can use the ! operator to assert that the said value is not null or undefined .
*ngIf="cardForm.controls.name.errors!['required']"
Upvotes: 0
Reputation: 11
// Property 'requiered' comes from an index signature, so it must be accessed with ['requiered'].ngtsc(4111)
solutions: <div *ngIf="f?.errors?.['requiered']">
Upvotes: 1
Reputation: 7255
This is what worked for me in 2023:
In tsconfig.json, I just changed "strict": true,
to "strict": false,
and restarted the server.
The above fixed it for me.
Upvotes: 2
Reputation: 111
For angular version ^14.0
, this can be used:
form.controls['firstName'].errors?.['required']
and
form.controls['firstName'].errors?.['minlength']
Upvotes: 11
Reputation: 75
<div *ngIf="postForm.get('title')?.touched && !postForm.get('title')?.valid"> <div *ngIf="postForm.get('title')?.errors?.['required']" class="alert alert-warning"> Title is required </div> </div>
angular version is 13.3.0
5
The Object is possibly 'null' error can happen due to strict type checking and can be solved in 2 ways:
So you can replace the if statement with postForm.get('title')?.touched && !postForm.get('title')?.valid and it should work.
Upvotes: 2
Reputation: 1
Validation for a required field
<input type="text" class="form-control form-control-user" formControlName="firstname">
<div class="text-danger" *ngIf="(f['firstname'].touched || submitted) && f['firstname'].errors?.['required']"> First Name is required!</div>
Upvotes: 0
Reputation: 41
<div *ngIf="f.firstName?.touched && f.firstName?.invalid">
<small class="text-danger" *ngIf="f.firstName?.errors?.['required']">
Doing validation in reactive form Angular 13 requires to add optional chaining operator (the question mark '?') to the FormControl object (f.firstName) and its errors property.
Upvotes: 4
Reputation: 1
Latest Angular Syntax require safe navigation operator ?
in brackets as shown below:
*ngIf="f['firstname'].errors?['required']"
Upvotes: 0
Reputation: 11
We can us form.controls['firstName] and form.controls['firstName].errors?.length
Upvotes: 1
Reputation: 1
error TS2531: Object is possibly 'null'.
4 <div class="alert alert-danger" *ngIf="myForm.get('fname').touched">
Upvotes: -1
Reputation: 131
latest version of angular requires you Use the safe navigation operator inside your first if check as well eg.
*ngIf="f.firstName?.touched && f.firstName?.invalid"
then finally
*ngIf="f.firstName.errors?.required"
Upvotes: 9
Reputation: 14699
The object f.firstName.errors
can be null. Use the safe navigation operator ?
:
*ngIf="f.firstName.errors?.required"
Upvotes: 65