{"id":2042,"date":"2024-04-24T12:15:09","date_gmt":"2024-04-24T19:15:09","guid":{"rendered":"https:\/\/www.angulartraining.com\/daily-newsletter\/?p=2042"},"modified":"2024-04-24T12:15:10","modified_gmt":"2024-04-24T19:15:10","slug":"how-to-use-angular-router-state","status":"publish","type":"post","link":"https:\/\/www.angulartraining.com\/daily-newsletter\/how-to-use-angular-router-state\/","title":{"rendered":"How to use Angular Router State?"},"content":{"rendered":"\n<p>The Angular Router supports passing custom state information with every navigation. Here is an example of using <code>routerLink<\/code> with some attached <code>state<\/code>:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"728\" height=\"33\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/04\/image-7.png\" alt=\"\" class=\"wp-image-2048\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/04\/image-7.png 728w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/04\/image-7-300x14.png 300w\" sizes=\"auto, (max-width: 728px) 100vw, 728px\" \/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>As you can see, <code>state<\/code> is an <a href=\"https:\/\/angular.io\/api\/router\/RouterLink#properties\" target=\"_blank\" rel=\"noopener\" title=\"\">@Input of the routerLink directive<\/a>. You can pass any number of objects you want to that <code>state<\/code>. Such a state gets added to the browser&#8217;s <code>history.state<\/code> object, which can be helpful if you need to pass some information to a non-Angular library, for instance.<\/p>\n\n\n\n<p>The receiving component can access the data using <code>router.getCurrentNavigation()<\/code>. The state data is then nested under <code>extras.state<\/code>:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"101\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/04\/image-6.png\" alt=\"\" class=\"wp-image-2046\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/04\/image-6.png 778w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/04\/image-6-300x39.png 300w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/04\/image-6-768x100.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>You can find an example in action <a href=\"https:\/\/stackblitz.com\/edit\/at-router-state?file=src%2Fproducts.component.ts\" target=\"_blank\" rel=\"noopener\" title=\"\">here on Stackblitz<\/a>. The example is an app with a list of products. Clicking on a product opens a product details component. The selected product is passed to such component using router state instead of using a <a href=\"https:\/\/www.angulartraining.com\/daily-newsletter\/using-a-resolver-function-or-a-title-strategy-to-change-the-page-title\/\" target=\"_blank\" rel=\"noopener\" title=\"\">resolver<\/a> and URL parameters, which leaves our router config lightweight:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"562\" height=\"131\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/04\/image-8.png\" alt=\"\" class=\"wp-image-2049\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/04\/image-8.png 562w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/04\/image-8-300x70.png 300w\" sizes=\"auto, (max-width: 562px) 100vw, 562px\" \/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>The end result looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"655\" height=\"446\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/04\/router-state.gif\" alt=\"\" class=\"wp-image-2047\"\/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>The Angular Router supports passing custom state information with every navigation. Here is an example of using routerLink with some attached state: As you can see, state is an @Input of the routerLink directive. You can pass any number of objects you want to that state. Such a state gets added to the browser&#8217;s history.state [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,25],"tags":[],"class_list":["post-2042","post","type-post","status-publish","format-standard","hentry","category-angular","category-routing"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/2042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/comments?post=2042"}],"version-history":[{"count":4,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/2042\/revisions"}],"predecessor-version":[{"id":2051,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/2042\/revisions\/2051"}],"wp:attachment":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/media?parent=2042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/categories?post=2042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/tags?post=2042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}