Ojage S
Ojage S

Reputation: 125

Object is possibly Null

I want to get the id from the url and then use that to navigate to a different specific view I have the following function

getStudent(): void {
  const id = + this.route.snapshot.paramMap.get('id');
  this.studentService.getStudent(id)
     .subscribe(student => this.SpecificStudent = student);

I have tried to make sure it is not null by using the assertion

// !

const id = + this.route.snapshot.paramMap.get('id')!;

If I do this, it doesn’t show an error, but alert(id) gives 0 which is wrong

Upvotes: 5

Views: 8321

Answers (4)

Mopendra Kumar
Mopendra Kumar

Reputation: 81

You can do something like this

    id: number;
    ngOnInit(){
      this.route.paramMap.subscribe(params =>{
        const id =  params.get('id');
        this.id = Number(id);
      });

Upvotes: 0

Taimoor Qureshi
Taimoor Qureshi

Reputation: 630

you can do it as

const id = + this.route.snapshot.paramMap.get('id');
id && this.studentService.getStudent(id)
     .subscribe(student => this.SpecificStudent = student);

Upvotes: 1

Bayram Eren
Bayram Eren

Reputation: 442

You can use the Number method:

Number(this.route.snapshot.paramMap.get('id'))

Or

this.route.paramMap.subscribe(param => {
      let id = +param.get('id');
})

Upvotes: 12

GBra 4.669
GBra 4.669

Reputation: 1679

You have two possible solutions:

  1. Assign to id if not falsy, otherwise assign something else:
const id = this.route.snapshot.paramMap.get('id') || 'yourDefaultString';
this.studentService.getStudent(id)
.subscribe(student => this.SpecificStudent = student);
  1. check before passing the argument to the function that is not falsy, if it's falsy we will pass our default string:
const id = this.route.snapshot.paramMap.get('id');
this.studentService.getStudent(id ? id : 'yourDefaultString')
.subscribe(student => this.SpecificStudent = student);

Upvotes: 2

Related Questions