{"id":2153,"date":"2024-08-29T14:52:27","date_gmt":"2024-08-29T21:52:27","guid":{"rendered":"https:\/\/www.angulartraining.com\/daily-newsletter\/?p=2153"},"modified":"2024-08-29T14:52:35","modified_gmt":"2024-08-29T21:52:35","slug":"how-to-use-tosignal-outside-of-an-injection-context","status":"publish","type":"post","link":"https:\/\/www.angulartraining.com\/daily-newsletter\/how-to-use-tosignal-outside-of-an-injection-context\/","title":{"rendered":"How to use toSignal() outside of an injection context?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">If you&#8217;ve ever tried to convert an Observable into a Signal using the <a href=\"https:\/\/www.angulartraining.com\/daily-newsletter\/rxjs-and-signals-interoperability\/\" target=\"_blank\" rel=\"noopener\" title=\"\">toSignal() function<\/a>, you might have encountered the following error<strong> NG0203: toSignal() can only be used within an injection context<\/strong>:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"742\" height=\"111\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-7.png\" alt=\"\" class=\"wp-image-2154\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-7.png 742w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-7-300x45.png 300w\" sizes=\"auto, (max-width: 742px) 100vw, 742px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This happens when you create an Observable outside of an <a href=\"https:\/\/www.angulartraining.com\/daily-newsletter\/whats-an-injection-context\/\" target=\"_blank\" rel=\"noopener\" title=\"\">injection context<\/a>, which can happen if you want to download data when the user clicks on a button, for instance:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"368\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-8.png\" alt=\"\" class=\"wp-image-2155\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-8.png 936w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-8-300x118.png 300w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-8-768x302.png 768w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Can we make this work? Absolutely! The key is to access our injector and store it in a variable so we can pass it as a parameter to <code>toSignal()<\/code>. How to do that?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Interestingly enough, we can access our injector by&#8230; injecting it into our component:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"358\" height=\"44\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-9.png\" alt=\"\" class=\"wp-image-2156\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-9.png 358w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-9-300x37.png 300w\" sizes=\"auto, (max-width: 358px) 100vw, 358px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then, we pass it as an option to the <code>toSignal()<\/code> function:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"582\" height=\"157\" src=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-10.png\" alt=\"\" class=\"wp-image-2157\" srcset=\"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-10.png 582w, https:\/\/www.angulartraining.com\/daily-newsletter\/wp-content\/uploads\/2024\/08\/image-10-300x81.png 300w\" sizes=\"auto, (max-width: 582px) 100vw, 582px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And that&#8217;s it, problem solved! You can see the <a href=\"https:\/\/stackblitz.com\/edit\/at-tosignal-injector?file=src%2Fmain.ts\" target=\"_blank\" rel=\"noopener\" title=\"\">full code example on Stackblitz<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;ve ever tried to convert an Observable into a Signal using the toSignal() function, you might have encountered the following error NG0203: toSignal() can only be used within an injection context: This happens when you create an Observable outside of an injection context, which can happen if you want to download data when the [&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,10,29],"tags":[],"class_list":["post-2153","post","type-post","status-publish","format-standard","hentry","category-angular","category-rxjs","category-signals"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/2153","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=2153"}],"version-history":[{"count":2,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/2153\/revisions"}],"predecessor-version":[{"id":2159,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/posts\/2153\/revisions\/2159"}],"wp:attachment":[{"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/media?parent=2153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/categories?post=2153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulartraining.com\/daily-newsletter\/wp-json\/wp\/v2\/tags?post=2153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}