Monday, 23 August 2021

Angular 8 Angular Router - Route with parameters

 https://www.tektutorialshub.com/angular/angular-passing-parameters-to-route/


How to Pass parameters to Angular Route

Defining the Route

We can define parameter by adding forward slash followed colon and a placeholder (id) as shown below

Now above path matches the URLs /product/1 , /product/2, etc.

If you have more than one parameter, then you can extend it by adding one more forward slash followed colon and a placeholder

The name idid1 & id2 are placeholders for parameters. We will use them while retrieving the values of the parameters.

Defining the Navigation

We, now need to provide both path and the route parameter routerLink directive.

This is done by adding the productID as the second element to the routerLink parameters array as shown below

Which translates to the URL /product/2

OR

Which, dynamically takes the value of id from the product object.

Retrieve the parameter in the component

Finally, our component needs to extract the route parameter from the URL

This is done via the ActivatedRoute service from angular/router module to get the parameter value


ActviatedRoute

The ActivatedRoute is a service, which keeps track of the currently activated route associated with the loaded Component.

To use ActivatedRoute, we need to import it in our component

Then inject it into the component using dependency injection

ParamMap

The Angular adds the map all the route parameters in the ParamMap object, which can be accessed from the ActivatedRoute service

The ParamMap makes it easier to work with parameters. We can use get or getAll methods to retrieve the value of the parameters in the component. Use the has method to check if a certain parameter exists.

The Older version of ActivatedRoute class has a Params array which is an array of the parameter values, indexed by name. You can still use it but It is now deprecated and is replaced by the ParamMap.

There are two ways in which you can use the ActivatedRoute to get the parameter value from the ParamMap object.

  1. Using Snapshot
  2. Using observable

Using Snapshot

The snapshot property returns the initial value of the route. You can then access the paramsMap array, to access the value of the id, as shown above,

Use the Snapshot option, if you only need the initial value.

Using Observable

You can retrieve the value of id by subscribing to the paramMap observable property of the activateRoute as shown above

Use this option if you expect the value of the parameter to change over time.

Why use observable

We usually retrieve the value of the parameter in the ngOninit life cycle hook, when the component initialised.

When the user navigates to the component again, the Angular does not create the new component but reuses the existing instance. In such circumstances, the ngOnInit method of the component is not called again. Hence you need a way to get the value of the parameter.

By subscribing to the observable paramMap property, you will retrieve the latest value of the parameter and update the component accordingly.

The above difference is explained in our next tutorial Angular child routes tutorial.

Passing Parameters to Route: Example

Here is the complete list of code.

product.component.ts

product.component.html

product.service.ts

product.ts

In the product.component.html, we have added product.productID as the second argument to the routerLink parameters array.

Product Details Component

product-detail.component.ts

product-detail.component.html

In the ProductDetailComponent, we have imported router and ActivatedRoute from the angular router module

In the constructor, we inject the ActivatedRouteRouter service along with ProductService

Finally, we use ngOninit life cycle hook to retrieve the value of the id parameter and use that value to retrieve the details of the product.

Note that, there are two ways, by which you can retrieve the data.

Using snapshot

Using Subscribe

We used snapshot method to retrieve the parameter in the ProductDetailcomponet.ts. To Subscribe to params remove the ngOnInit and replace it with the following code

We recommend you to use the subscribe method as it offers the benefit of responding to the parameter changes dynamically.

The Routes

app.routing.ts

We have added the following route to our routes array

Other components

app.component.ts

app.component.html

contact.component.ts

home.component.ts

error.component.ts

app.module.ts



No comments:

Post a Comment