2
votes

I'm trying to get the prameter :id from my activated route using observables. When I print params on the console I get the right values for :id. But it's not the case for this.id. I get the value NaN. Can you tell me what is the problem

export class RecipeEditComponent implements OnInit {
  id: number;
  editMode = false;

  constructor(private route: ActivatedRoute) { }

  ngOnInit() {
    this.route.params.subscribe(
      (params: {id: string}) => {
        this.id = +params.id;
        console.log(this.id);
      }
    );
}
}
5
Could you put that code into your question as code block and not as image.penleychan
what you get if you console.log(params.id)?robert
Undifined Even though I'm getting the right object when I print params the object with :id = 1faouzi Ch
how do you call this route? what is in your browsers address bar?robert
the route is : { path: '::id/edit', component: RecipeEditComponent} The link in the browser is: localhost:4200/recipes/0/editfaouzi Ch

5 Answers

5
votes

Change to this.id = +params.get('id').

You should use the method get() because it returns a single value for the given parameter id. You were getting an error because params is not a key with id as a value.

export class RecipeEditComponent implements OnInit {
  id: number;
  editMode = false;

  constructor(private route: ActivatedRoute) { }

  ngOnInit() {
  // paramMap replaces params in Angular v4+
   this.route.paramMap.subscribe(params: ParamMap => {
        this.id = +params.get('id');
        console.log(this.id);     
  });
}
1
votes

I think the following code is going to work in your case:

ngOnInit() {
this.heroes$ = this.route.paramMap.pipe(
  switchMap(params => {
    // (+) before `params.get()` turns the string into a number
    this.selectedId = +params.get('id');
    return this.service.getHeroes();
  })
);

}

Also you can try this:

this.sessionId = this.route
  .queryParamMap
  .pipe(map(params => params.get('id') || 'None'));
1
votes

The problem was in the route definition: putting : instead of ::

0
votes

Retrieve the params like this:

  ngOnInit() {
this.route.params.subscribe(
  (params: Params) => {
    this.id = +params["id"];
    console.log(this.id);
  }
);

} }

0
votes

id: number;

constructor(private route: ActivatedRoute) { }

ngOnInit() {

this.id = this.route.snapshot.params(['id'])

}