{"id":701,"date":"2023-03-28T05:00:00","date_gmt":"2023-03-28T12:00:00","guid":{"rendered":"https:\/\/www.angulartraining.com\/daily-newsletter\/?p=701"},"modified":"2023-03-24T15:01:48","modified_gmt":"2023-03-24T22:01:48","slug":"resolver-function-for-the-angular-router","status":"publish","type":"post","link":"https:\/\/www.angulartraining.com\/daily-newsletter\/resolver-function-for-the-angular-router\/","title":{"rendered":"Resolver function for the Angular Router"},"content":{"rendered":"\n<p>The last router function of our <a href=\"https:\/\/www.angulartraining.com\/daily-newsletter\/route-guards-canactivate-canactivatechild-candeactivate\/\" target=\"_blank\" rel=\"noopener\" title=\"\">guard series<\/a> is <code><a href=\"https:\/\/angular.io\/api\/router\/ResolveFn\" target=\"_blank\" rel=\"noopener\" title=\"\">resolve<\/a><\/code>. It is the replacement for class-based resolvers. A resolver function runs <strong>after <\/strong>all guards have run and <strong>before <\/strong>the destination component is rendered. Such a function is typically used to preload component data before rendering it on the screen.<\/p>\n\n\n\n<p>For instance, in this example:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"288\" height=\"78\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/03\/image-36.png\" alt=\"\" class=\"wp-image-698\"\/><\/figure>\n<\/div>\n\n\n<p><code>heroResolver<\/code> is a function that returns either some data or a <code>Promise<\/code> or an <code>Observable<\/code> of that data. Such data will be stored in the <code>hero<\/code> property of a <code>data<\/code> object returned by an Observable from the <code>ActivatedRoute<\/code> service as follows:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"529\" height=\"284\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/03\/image-37.png\" alt=\"\" class=\"wp-image-699\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/03\/image-37.png 529w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2023\/03\/image-37-300x161.png 300w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>Of course, we could resolve multiple different pieces of data using the following syntax: <\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">resolve: {<span class=\"hljs-attr\">user<\/span>: userResolver, <span class=\"hljs-attr\">session<\/span>: sessionResolver},<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>A resolver function can use the <a href=\"https:\/\/www.angulartraining.com\/daily-newsletter\/the-inject-function\/\" target=\"_blank\" rel=\"noopener\" title=\"\"><code>inject<\/code> function<\/a> to use services and resolve data as follows:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"TypeScript\" data-shcb-language-slug=\"typescript\"><span><code class=\"hljs language-typescript\"><span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">const<\/span> userResolver: ResolveFn&lt;User&gt; = <span class=\"hljs-function\"><span class=\"hljs-params\">()<\/span> =&gt;<\/span> { \n    <span class=\"hljs-keyword\">return<\/span> inject(UserService).getCurrentUser(); \n };<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">TypeScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">typescript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The last router function of our guard series is resolve. It is the replacement for class-based resolvers. A resolver function runs after all guards have run and before the destination component is rendered. Such a function is typically used to preload component data before rendering it on the screen. For instance, in this example: heroResolver [&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-701","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\/701","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=701"}],"version-history":[{"count":11,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/701\/revisions"}],"predecessor-version":[{"id":720,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/701\/revisions\/720"}],"wp:attachment":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/media?parent=701"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/categories?post=701"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/tags?post=701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}