<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Angular Weekly]]></title><description><![CDATA[Angular Weekly is a summary of #angular related topics and news from the last week]]></description><link>https://angularweekly.substack.com</link><image><url>https://s3.amazonaws.com/revue/profiles/images/000/338/534/thumb/LogoMakr-2wrDvq_%281%29.png?1636196656</url><title>Angular Weekly</title><link>https://angularweekly.substack.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 18 Oct 2026 09:58:03 GMT</lastBuildDate><atom:link href="https://angularweekly.substack.com/feed" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><webMaster><![CDATA[angularweekly@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[angularweekly@substack.com]]></itunes:email><itunes:name><![CDATA[Yevhenii Herasymchuk]]></itunes:name></itunes:owner><itunes:author><![CDATA[Yevhenii Herasymchuk]]></itunes:author><googleplay:owner><![CDATA[angularweekly@substack.com]]></googleplay:owner><googleplay:email><![CDATA[angularweekly@substack.com]]></googleplay:email><googleplay:author><![CDATA[Yevhenii Herasymchuk]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Issue #76: RxJs and Signals Interoperability, Angular Tiny Conf, lazy loading services ]]></title><description><![CDATA[Authors featured: @NetanelBasal @joshuamorony @angulartinyconf  @Enea_Jahollari]]></description><link>https://angularweekly.substack.com/p/issue-76-rxjs-and-signals-interoperability</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-76-rxjs-and-signals-interoperability</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Tue, 02 May 2023 06:28:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9V6p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>#ngTutorials</h2><p></p><h4><a href="https://netbasal.com/converting-observables-to-signals-in-angular-what-you-need-to-know-4f5474c765a0">Converting Observables to Signals in Angular: What You Need to Know</a> | by <a href="https://twitter.com/NetanelBasal">Netanel Basal</a></h4><blockquote><p>Angular v16 comes with a new package named <code>rxjs-interop</code>, which introduces the <code>toSignal</code> function that converts an observable to a signal. In this article, we&#8217;ll take a closer look at this new feature and its usage.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=sIeTGWSUK7M">What most devs don't get about declarative code (I didn't either)</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>Imperative code generally looks easier and more intuitive, whilst declarative code looks confusing and hard to maintain. But this misses the true benefit of declarative code, and the organised structure it can bring to your applications.</p></blockquote><h4><a href="https://itnext.io/lazy-loading-services-in-angular-what-yes-we-can-cfbaf586d54e">Lazy loading services in Angular. What?! Yes, we can.</a> | by <a href="https://twitter.com/Enea_Jahollari">Enea Jahollari</a></h4><blockquote><p>We&#8217;re used to lazy loading modules or components in Angular. But what about lazy loading services? <em>Wait, what?</em> <em>Yes, we can</em>. In this article, we will learn how to lazy load a service in Angular and it&#8217;s gotchas.</p></blockquote><h2>#ngCommunity</h2><h4><a href="https://www.youtube.com/watch?v=fs26vhD330U">Angular Tiny Conf - Shemu 2023</a> | by <a href="https://twitter.com/angulartinyconf">Angular Tiny Conf</a></h4><blockquote><p>The Angular Tiny Conference is a quarterly one day online event aiming to share all of the amazing ways individuals and teams are using not only the latest and greatest features, but also to celebrate the hard won victories as a testimony to the longevity and health of the platform.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9V6p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9V6p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9V6p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9V6p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9V6p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9V6p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg" width="466" height="262.125" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:466,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9V6p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9V6p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9V6p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9V6p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0271aceb-8a68-408f-9b20-6c1a6f63b860_1280x720.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><h2>#ngPodcasts</h2><h4><a href="https://www.spreaker.com/user/ng-conf/s5e9-rxjs-and-signals-interoperability-i">S5E9 | RxJs and Signals Interoperability in Angular with Ben Lesh | by The Angular Plus Show</a></h4><blockquote><p>Signals are coming to Angular! So what does that mean for RxJs? In this episode we invite Ben Lesh to get his take on what the Signals story means for RxJs and Angular. How can Signals and RxJs work together, when one might be the better tool, and what bad patterns should developers watch out for as they begin to implement Signals in their code.</p></blockquote><p></p><h4><a href="https://podcasters.spotify.com/pod/show/angular-master/episodes/AMP-40-Vojtech-Maek-on-Exploring-Advanced-Lazy-Loading-Strategies-Going-Beyond-the-Angular-Router-e231ngi">AMP 40: Vojtech Ma&#353;ek on Exploring Advanced Lazy-Loading Strategies: Going Beyond the Angular Router | by Angular Master Podcast</a></h4><blockquote><p>I had an awesome time chatting with Vojtech Ma&#353;ek, Head of Engineering at FlowUp, about advanced lazy-loading strategies in Angular! &#128165;</p><p>In this epic episode, we dive into:</p><ul><li><p>Angular Router limitations</p></li><li><p>Best practices for advanced lazy-loading</p></li><li><p>Optimization techniques for production-ready apps</p></li><li><p>Trade-offs and future directions of lazy-loading in Angular</p></li></ul><p>Don't miss out! Tune in now and let's level up our Angular skills together! &#128640;</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Issue #75: What’s next for Server Side Rendering, reusable animations, story behind Angular Signals, Change Detection in Angular]]></title><description><![CDATA[Authors featured: @AngularAir @c5n_c8u @DecodedFrontend @danywalls @KushnirAndrew @fati_amzil @ngKalbarczyk]]></description><link>https://angularweekly.substack.com/p/issue-75-whats-next-for-server-side</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-75-whats-next-for-server-side</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Mon, 24 Apr 2023 20:18:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Uzk6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Uzk6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Uzk6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png 424w, https://substackcdn.com/image/fetch/$s_!Uzk6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png 848w, https://substackcdn.com/image/fetch/$s_!Uzk6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png 1272w, https://substackcdn.com/image/fetch/$s_!Uzk6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Uzk6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png" width="1400" height="855" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:855,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;red water bottle with angular logo and droplets of water on it&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="red water bottle with angular logo and droplets of water on it" title="red water bottle with angular logo and droplets of water on it" srcset="https://substackcdn.com/image/fetch/$s_!Uzk6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png 424w, https://substackcdn.com/image/fetch/$s_!Uzk6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png 848w, https://substackcdn.com/image/fetch/$s_!Uzk6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png 1272w, https://substackcdn.com/image/fetch/$s_!Uzk6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e06beb6-0fe6-4620-9cd0-e66c4c82d977_1400x855.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><a href="https://blog.angular.io/whats-next-for-server-side-rendering-in-angular-2a6f27662b67">What&#8217;s next for Server Side Rendering in Angular</a> | by <a href="https://jessicajaniuk.com/">Jessica Janiuk</a> and <a href="https://twitter.com/KushnirAndrew">Andrew Kushnir</a></h4><blockquote><p>In May of 2022, we shared Angular&#8217;s vision for the future, where we committed to investing in server side rendering and hydration. Angular has had support for server side rendering through Angular Universal, which originally came into being thanks to third party contributors. Eventually Angular Universal became the official SSR library for Angular.</p><p>Fast forward to 2023, and SSR is now an essential part of modern web applications and has been for a few years. We&#8217;ve conducted surveys and the community has let us know that server side rendering is the top area Angular users want improvements. As a result of your feedback and the changed landscape around SSR, we have made server side rendering a top priority in 2023.</p></blockquote><h2>#ngTutorials</h2><h4><a href="https://www.youtube.com/watch?v=Ys7xdebd66Y">Change Detection in Angular Pt.2 - The Role of ZoneJS (2023)</a> | by <a href="https://twitter.com/DecodedFrontend">Decoded Frontend (Dmytro Mezhenskyi)</a></h4><blockquote><p>Welcome back to my video series on Change Detection in Angular! In this second video, we'll examine the ZoneJS library and its role in the Change Detection process. You'll learn about the monkey-patching technique, how it looks in practice, and figure out how Angular uses ZoneJS under the hood. </p></blockquote><p></p><h4><a href="https://catalincodes.com/posts/reusable-animations-with-angular">How to setup reusable animations with Angular</a> | by <a href="https://twitter.com/c5n_c8u">Catalin Ciubotaru</a></h4><blockquote><p>How to make your Angular apps prettier, more user-friendly, and overall more whimsical.</p></blockquote><p></p><h4><a href="https://javascript.plainenglish.io/angular-signals-story-d0dd77e2152b">The story behind Angular Signals!</a> | by <a href="https://twitter.com/fati_amzil">Fatima Amzil</a></h4><blockquote><p>Days ago, Angular published Angular v16-next version with the big upcoming feature, which is signals as a developer preview!</p><p>Signal brings a big change to the whole framework and will, in my opinion, make Angular more popular in the upcoming years as this feature will fix a historic limitation of Angular, which is Zone.js.</p></blockquote><p></p><h4><a href="https://www.danywalls.com/key-rxjs-operators-every-angular-developer-should-know">Key RxJS Operators Every Angular Developer Should Know</a> | by <a href="https://twitter.com/danywalls">Dany Paredes</a></h4><blockquote><p>Top RxJS Operators I Frequently Use Examples Included</p></blockquote><p></p><p></p><h2>#ngPodcasts</h2><h4><a href="https://www.youtube.com/watch?v=qouPZhkojN4">To SSR or SPA, that is the question!</a> | by <a href="https://twitter.com/AngularAir">AngularAir</a></h4><blockquote><p>Sander Elias will explain the differences between SSR and SSG. He will also demonstrate how SSR is even possible in Angular, what that looks like, and when you should utilize it. Alyssa also plans on bothering Sander at a higher level about how the JS community is slowly swinging back towards SSR (over SPA) and how we all feel about this upcoming development.</p></blockquote><p></p><h4><a href="https://podcasters.spotify.com/pod/show/angular-master/episodes/AMP-39-Manfred-Steyer-on-Modern-Architectures-with-Angular-Latest-Innovations-e22sbvl">AMP 39: Manfred Steyer on Modern Architectures with Angular Latest Innovations | by Angular Master Podcast</a></h4><blockquote><p>Join us as we chat with the legendary Manfred Steyer, an awesome speaker, trainer, consultant, and author, all about modern architectures and Angular's freshest innovations! &#128640;</p><p>In this dope episode, Manfred Steyer and I chop it up about:</p><ol><li><p>The game-changing innovations in Angular-based architectures like standalone components, standalone APIs, functional services (e.g., Guards, Resolver, Interceptors), and router enhancements.</p></li><li><p>Organizing an Angular app's structure without using NgModules.</p></li><li><p>The lowdown on the Angular Sheriff's role.</p></li><li><p>The 411 on standalone APIs and the migration process.</p></li><li><p>Everything you need to know about routing and lazy loading in Angular.</p></li><li><p>The key aspects of functional services in Angular.</p></li><li><p>The impact of signals on the performance and functioning of the described elements.</p></li></ol></blockquote>]]></content:encoded></item><item><title><![CDATA[Issue #74: April 2023 #ngGames, Demystifying the push & pull nature of Angular Signals, Signals: what this means for NgRx, Mobile Development with Angular, Capacitor, and Ionic]]></title><description><![CDATA[Authors featured: @joshuamorony @tomastrajan @danywalls @Armandotrue]]></description><link>https://angularweekly.substack.com/p/issue-74-april-2023-nggames-demystifying</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-74-april-2023-nggames-demystifying</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Mon, 17 Apr 2023 20:54:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qTct!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qTct!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qTct!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qTct!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qTct!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qTct!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qTct!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg" width="480" height="360" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:480,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qTct!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qTct!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qTct!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qTct!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5851a07f-3a11-45a5-9dec-aa23de9979d1_480x360.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><a href="https://www.youtube.com/watch?v=dMxlW7gU72s">Building Games and Q/A with the Angular Team | April 2023 | #ngGames</a> | by <a href="https://www.youtube.com/@Angular">Angular</a></h4><blockquote><p>Angular Community, join Jeremy Elbourn and Mark Thompson as they answer questions and have some fun!</p></blockquote><p></p><h2>#ngTutorials</h2><h4><a href="https://www.youtube.com/watch?v=SVPyr6u3sqU">The end of Angular's "service with a subject" approach?</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>A "service with a subject" is one of Angular's most popular state management approaches, but what is this going to look like when signals become available?</p></blockquote><h4><a href="https://angularexperts.io/blog/angular-signals-push-pull">Demystifying the push &amp; pull nature of Angular Signals</a> | by <a href="https://twitter.com/tomastrajan">Tomas Trajan</a></h4><blockquote><p>Let's take a deep dive into Angular signals and how they can be understood using the primitive push &amp; pull concepts to make sense of all their behaviors from setting a value all the way to effects and laziness!</p></blockquote><h4><a href="https://www.danywalls.com/how-to-get-and-use-ng-template-ng-container-and-ng-content">How to get and use ng-template, ng-container and ng-content</a> | by <a href="https://twitter.com/danywalls">Dany Paredes</a></h4><blockquote><p>Using ng-template, ng-container, and ng-content with examples</p></blockquote><p></p><h4><a href="https://dev.to/this-is-angular/signals-what-this-means-for-ngrx-eho">Signals: what this means for NgRx</a> | by <a href="https://twitter.com/Armandotrue">Armen Vardanyan</a></h4><blockquote><p>On April 4th, 2023, the Angular team officially launched an RFC for the new reactive primitive, signals, that will arrive as a developer preview in Angular v16. This could mean a beginning of a new era of Angular development, less dependence on RxJS, more granular change detection, and maybe even zoneless applications.</p><p>But what this means for us, NgRx enthusiasts? Let's find out.</p></blockquote><p></p><p></p><h2>#ngPodcasts</h2><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/mobile-development-with-angular-capacitor-and-ionic-aia-378">Mobile Development with Angular, Capacitor, and Ionic - AiA 378 | by Adventures in Angular</a></h4><blockquote><p>Simon Grimm is a Creator, Indie Maker &amp; Solopreneur. He is currently working at The Ionic Academy. He joins the show to talk about Ionic and building native mobile apps with Angular. He explains all about "Capacitor" and how it contributes to your web application.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Issue #73: Signals, Change Detection, takeUntilDestroyed Operator, bindToComponentInputs, Superpowers with Directives and DI]]></title><description><![CDATA[Authors featured: @Armandotrue @DeborahKurata @SantoshYadavDev @Enea_Jahollari @joshuamorony @NetanelBasal  @DecodedFrontend]]></description><link>https://angularweekly.substack.com/p/issue-73-signals-change-detection</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-73-signals-change-detection</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Mon, 10 Apr 2023 20:37:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!id0S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4beb5d13-20b7-435f-802b-8386f31c2420_2000x1059.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!id0S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4beb5d13-20b7-435f-802b-8386f31c2420_2000x1059.png 424w, https://substackcdn.com/image/fetch/$s_!id0S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4beb5d13-20b7-435f-802b-8386f31c2420_2000x1059.png 848w, https://substackcdn.com/image/fetch/$s_!id0S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4beb5d13-20b7-435f-802b-8386f31c2420_2000x1059.png 1272w, https://substackcdn.com/image/fetch/$s_!id0S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4beb5d13-20b7-435f-802b-8386f31c2420_2000x1059.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!id0S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4beb5d13-20b7-435f-802b-8386f31c2420_2000x1059.png" width="442" height="234.05357142857142" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4beb5d13-20b7-435f-802b-8386f31c2420_2000x1059.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:771,&quot;width&quot;:1456,&quot;resizeWidth&quot;:442,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Signals in Angular &#8211; How to Write More Reactive Code&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Signals in Angular &#8211; How to Write More Reactive Code" title="Signals in Angular &#8211; How to Write More Reactive Code" srcset="https://substackcdn.com/image/fetch/$s_!id0S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4beb5d13-20b7-435f-802b-8386f31c2420_2000x1059.png 424w, https://substackcdn.com/image/fetch/$s_!id0S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4beb5d13-20b7-435f-802b-8386f31c2420_2000x1059.png 848w, https://substackcdn.com/image/fetch/$s_!id0S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4beb5d13-20b7-435f-802b-8386f31c2420_2000x1059.png 1272w, https://substackcdn.com/image/fetch/$s_!id0S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4beb5d13-20b7-435f-802b-8386f31c2420_2000x1059.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><h4><a href="https://www.freecodecamp.org/news/angular-signals/">Signals in Angular &#8211; How to Write More Reactive Code</a> | by <a href="https://twitter.com/DeborahKurata">Deborah Kurata</a></h4><blockquote><p>An exciting new feature is coming to Angular: signals! Signals provide a new way for our code to tell our templates (and other code) that our data has changed. This improves Angular's change detection, which also improves performance, and makes our code more reactive.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=hZOauXaO8Z8">Change Detection in Angular - Pt.1 View Checking</a> | by <a href="https://twitter.com/DecodedFrontend">Decoded Frontend (Dmytro Mezhenskyi)</a></h4><blockquote><p>This video is the first one in a video series that describes the Change Detection process in Angular and shows how everything works under the hood. In this video, we will focus more on the View Checking process and learn how Angular synchronizes the component views with corresponding data models (classes). I hope you will learn a lot from this video.</p></blockquote><p></p><h4><a href="https://dev.to/this-is-angular/superpowers-with-directives-and-dependency-injection-part-5-29ff">Superpowers with Directives and Dependency Injection: Part 5</a> | by <a href="https://twitter.com/Armandotrue">Armen Vardanyan</a></h4><blockquote><p>Here we are, part 5 of our series dedicated to Angular's directives! In <a href="https://dev.to/armandotrue/series/22266">previous articles</a> we have already explored various applications of directives and dependency injection. This time around we shall see how we can use directives to help components communicate on the most hard-to-reuse level - the template.</p><p>So, let's get started with today's use case.</p></blockquote><p></p><h4><a href="https://netbasal.com/getting-to-know-the-takeuntildestroyed-operator-in-angular-d965b7263856">Getting to Know the takeUntilDestroyed Operator in Angular</a> | by <a href="https://twitter.com/NetanelBasal">Netanel Basal</a></h4><blockquote><p>Angular <a href="https://github.com/angular/angular/blob/main/CHANGELOG.md#1600-next6-2023-04-03">v16</a> introduces a new feature in the <code>@angular/core/rxjs-interop</code> entry that includes three new operators: <code>fromSignal</code>, <code>fromObservable</code>, and <code>takeUntilDestroyed</code>. These operators are designed to enhance the functionality of RxJS in Angular applications.</p><p>The <code>takeUntilDestroyed</code> operator allows developers to automatically complete an observable when the calling context (which can be a component, directive, service, or a pipe) is destroyed. This helps prevent memory leaks and ensures that resources are released properly.</p></blockquote><p></p><h4><a href="https://dev.to/this-is-angular/angular-the-framework-of-past-present-and-future-87d">Angular: The Framework of Past, Present, and Future</a> | by <a href="https://twitter.com/SantoshYadavDev">Santosh Yadav</a></h4><blockquote><p>I started using Angular in 2017 when version 4 was released. And I have seen this framework growing since then. In this blog, let's see why Angular is a framework of Past, Present, and Future.</p></blockquote><p></p><h4><a href="https://dev.to/this-is-angular/bind-route-info-to-component-inputs-new-router-feature-35ll">Bind Route Info to Component Inputs (New Router feature)</a> | by <a href="https://twitter.com/Enea_Jahollari">Enea Jahollari</a></h4><blockquote><p>When building applications with Angular, most of the time we use the Router to render different pages for different urls.</p><p>And based on the url we also load the data based on its path parameters or query parameters.</p><p>In the latest version of Angular v16, we will get a new feature that will simplify the process of retrieving route information in the component and make it way easier.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=_quyWq4NnRM">Why I decided to switch to the inject() function in Angular</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>Angular 14 gave us the ability to use the inject() function more generally in our projects, including replacing constructor based dependency injection. But is it a good idea to switch to it?</p></blockquote><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Issue #72: Angular March Virtual Meetup, Reactive Angular, @ngneat/cmdk]]></title><description><![CDATA[Authors featured: @pkozlowski_os&#160;@codewith_ahsan&#160;@joshuamorony&#160;@tomastrajan @kreuzercode&#160;@danywalls&#160;@shhdharmen]]></description><link>https://angularweekly.substack.com/p/issue-72-angular-march-virtual-meetup</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-72-angular-march-virtual-meetup</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Sun, 02 Apr 2023 19:02:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!exlb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><h4><a href="https://www.youtube.com/watch?v=GgC4AvQ010I">Mountain View and San Francisco Angular March Virtual Meetup</a></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!exlb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!exlb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!exlb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!exlb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!exlb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!exlb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg" width="356" height="267" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/beb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:356,&quot;bytes&quot;:21126,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!exlb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!exlb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!exlb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!exlb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeb695b4-31a6-41a5-8f90-b7384cb5480b_640x480.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h4><a href="https://www.youtube.com/watch?v=bByZ6FGyuO0">Reactive Angular. At its core</a> | by <a href="https://twitter.com/pkozlowski_os">Pawel Kozlowski</a> at NGBE 2023</h4><blockquote><p>This year, the Angular team embarks on the journey of revisiting the change detection algorithm and baking-in reactive primitives into the framework. This talk is an occasion to re-trace our thinking, motivation behind the planned change and explorations done so far.</p></blockquote><p></p><h4><a href="https://www.codewithahsan.dev/blog/angular-signals-taking-reactivity-to-new-heights">Angular Signals - Taking Reactivity to New Heights &#128640;</a> | by <a href="https://twitter.com/codewith_ahsan">Muhammad Ahsan Ayaz</a></h4><blockquote><p>Hey there Angular enthusiasts! Are you ready to level up your reactive game? Today, we'll dive into Angular Signals, a fresh take on reactive programming that'll send your apps soaring through the skies of performance and scalability! &#129464;&#8205;&#9792;&#65039;&#129464;&#8205;&#9794;&#65039;</p><p>Angular Signals are here to save the day, simplifying how we manage reactive contexts and dependencies, and making our code cleaner and more efficient. In this post, we'll explore Angular Signals, learn how to use them, and might even crack a few jokes along the way! &#127183;</p></blockquote><p></p><h4><a href="https://www.danywalls.com/using-the-inject-function-in-angular-15">Using the Inject Function in Angular 15</a> | by <a href="https://twitter.com/danywalls">Dany Paredes</a></h4><blockquote><p>Since Angular 14/15, there has been an alternative way to inject dependencies in our Angular applications.</p><p>I will show two cases to use the inject function with Angular 14/15.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=iA6iyoantuo">Why didn't the Angular team just use RxJS instead of Signals?</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>Angular is introducing a new reactive primitive to the framework called "signals", which have been a popular reactive implementation in other frameworks. But, this begs the question: why didn't they just use BehaviorSubject which is already included in RxJS? This video explores that question.</p></blockquote><p></p><h4><a href="https://blog.shhdharmen.me/announcing-ngneatcmdk-fast-composable-unstyled-command-menu-for-angular">Announcing @ngneat/cmdk &#8212; Fast, composable, unstyled command menu for Angular.</a> | by <a href="https://twitter.com/shhdharmen"> Dharmen Shah</a></h4><blockquote><p>A few weeks ago I and <strong><a href="https://twitter.com/NetanelBasal">Netanel Basal</a></strong> came up with an idea to create <strong><a href="https://cmdk.paco.me/">cmdk</a></strong> like a library for the Angular community.</p></blockquote><p></p><h2>#ngPodcasts</h2><h4><a href="https://www.spreaker.com/user/ng-conf/s5e5-framework-building-with-ryan-carnia">S5E5 Framework Building with Ryan Carniato | by The Angular Plus Show</a></h4><blockquote><p>Signals are coming to Angular, so who better to talk about it than Ryan Carniato the project founder of Solid Js. In this episode we talk about what drives people to create new frameworks and how collaboration and learning from past iterations is a vital part of the process. We talk about fine grained reactivity which is at the core of Solid Js and how Angular might leverage some of the features of SolidJs to improve the reactivity story for Angular.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Issue #71: TypeScript 5.0, Angular Testing Tips, Angular Structural Directives and Their Microsyntax]]></title><description><![CDATA[Authors featured: @DecodedFrontend @bobbyg603 @drosenwasser @Armandotrue @eugeniyoz]]></description><link>https://angularweekly.substack.com/p/issue-71-typescript-50-angular-testing</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-71-typescript-50-angular-testing</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Tue, 21 Mar 2023 07:33:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Fx22!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d6b0fb-e921-47d2-b37c-f72b838601fc_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fx22!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d6b0fb-e921-47d2-b37c-f72b838601fc_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Fx22!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d6b0fb-e921-47d2-b37c-f72b838601fc_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Fx22!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d6b0fb-e921-47d2-b37c-f72b838601fc_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Fx22!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d6b0fb-e921-47d2-b37c-f72b838601fc_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fx22!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d6b0fb-e921-47d2-b37c-f72b838601fc_1280x720.jpeg" width="378" height="212.625" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17d6b0fb-e921-47d2-b37c-f72b838601fc_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:378,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fx22!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d6b0fb-e921-47d2-b37c-f72b838601fc_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Fx22!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d6b0fb-e921-47d2-b37c-f72b838601fc_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Fx22!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d6b0fb-e921-47d2-b37c-f72b838601fc_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Fx22!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d6b0fb-e921-47d2-b37c-f72b838601fc_1280x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><h4><a href="https://www.youtube.com/watch?v=HCg3vJpfYeg">First look at Signals in Angular</a> | by <a href="https://twitter.com/DecodedFrontend">Decoded Frontend (Dmytro Mezhenskyi)</a></h4><blockquote><p>The very first prototype of Signals was recently merged into the main Angular branch and available in Developer Preview Mode since Angular version 16.next.1. In this video, I will talk a little bit about the motivation to have reactive primitives in the core of the framework and how we as developers can benefit from it. I hope it will be interesting for you. Please share this video if you like it.</p></blockquote><p></p><h4><a href="https://itnext.io/angular-testing-tips-ng-mocks-7d9300443a9c">Angular Testing Tips: Ng-Mocks</a> | by <a href="https://twitter.com/bobbyg603">Bobby Galli</a></h4><blockquote><p>Write Better Tests Faster With Ng-Mocks and Jasmine-Auto-Spies</p></blockquote><p></p><h4><a href="https://itnext.io/angular-for-junior-developers-repository-and-file-structure-f3084c982415">Mastering Angular: Repository and File Structure</a> | by <a href="https://twitter.com/eugeniyoz">OZ</a></h4><blockquote><p>In this article, I&#8217;ll show you how to create and organize a repository for your Angular application in the most optimal way.</p></blockquote><p></p><h4><a href="https://dev.to/this-is-angular/superpowers-with-directives-and-dependency-injection-part-2-16ea">Superpowers with Directives and Dependency Injection: Part 2</a> | by <a href="https://twitter.com/Armandotrue">Armen Vardanyan</a></h4><blockquote><p>In the previous post we took a look at how we can use dependency injection + directives to both simplify our templates and achieve reusability. In this one, we are going to explore structural directives and how we can make components and directives interoperate and reduce clutter in our .html files even further.</p><p>Let's build a loader component!</p></blockquote><p></p><h2>#ngPodcasts</h2><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/angular-structural-directives-and-their-microsyntax-aia-374">Angular Structural Directives and Their Microsyntax - AiA 374 | by Adventures in Angular</a></h4><blockquote><p>Chuck and Lucas join this week's panelist episode discussing Angular Structural Directives and Their Microsyntax. They kick us off as Lucas explains the concept of Structural directives, and how developers might use them to their advantage.</p></blockquote><p></p><h4><a href="https://www.spreaker.com/user/ng-conf/ap-show-s5e3-jason-edit-1">S5 E3 - Welcome to the ng Community with Jason Warner | by The Angular Plus Show</a></h4><blockquote><p>In this episode we welcome Jason Warner, an ngChampion, co-organizer of the Angular Meet Up, and Twitch Streamer! We talk about the Angular Community, how to get involved, and what it takes to contribute.</p></blockquote><p></p><h2>#ngWeb</h2><h4><a href="https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/">Announcing TypeScript 5.0</a> | by <a href="https://twitter.com/drosenwasser">Daniel Rosenwasser</a></h4><blockquote><p>Today we&#8217;re excited to announce the release of TypeScript 5.0!</p><p>This release brings many new features, while aiming to make TypeScript smaller, simpler, and faster. We&#8217;ve implemented the new decorators standard, added functionality to better support ESM projects in Node and bundlers, provided new ways for library authors to control generic inference, expanded our JSDoc functionality, simplified configuration, and made many other improvements.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Issue #70: Angular LTS support starting with Nx 15.7, Reactive vs Template Driven Forms, Form Validation Done Right, Functional router guards]]></title><description><![CDATA[Authors featured: @wardbell  @joshuamorony @danywalls @eugeniyoz @KateSky8 @zzayani17 @brandontroberts @zackderose]]></description><link>https://angularweekly.substack.com/p/issue-70-angular-lts-support-starting</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-70-angular-lts-support-starting</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Tue, 14 Mar 2023 18:50:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BY0G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><h2>#ngTutorials</h2><p></p><h4><a href="https://itnext.io/angular-for-junior-developers-dangers-and-treasures-of-rxjs-97106873823d">Angular for Junior Developers: Dangers and Treasures of RxJS</a> | by <a href="https://twitter.com/eugeniyoz">OZ</a></h4><blockquote><p>In this article, I&#8217;ll show you how to avoid known dangerous pitfalls of RxJS, and will share some useful snippets.</p></blockquote><h4><a href="https://www.danywalls.com/angular-forms-choosing-between-reactive-and-template-driven-forms">Angular Forms: Choosing Between Reactive and Template Driven Forms</a> | by <a href="https://twitter.com/danywalls">Dany Paredes</a></h4><blockquote><p> When we start to build an application in Angular and need to create forms, we must pick one of the two flavors: "Reactive" or "Template Forms".</p><p>For beginners, Template Forms are natural and appear less complex for new joiners, but some developers may try to convince you that "If you want to have true control then you must use Reactive Forms".</p><p>Do I believe the most effective method for determining which option is superior is by solving the same problem with both alternatives?</p></blockquote><h4><a href="https://www.youtube.com/watch?v=p2RJ7xXIRII">I used Angular's signals to build an actual app</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>I refactored one of my existing Angular applications that relied heavily on RxJS and observables, to signals. This made me change my opinion on what I think is the likely fate of RxJS integration in Angular.</p></blockquote><h4><a href="https://www.youtube.com/watch?v=EMUAtQlh9Ko">Form Validation Done Right</a> | by <a href="https://twitter.com/wardbell">Ward Bell</a></h4><blockquote><p>Many folks (incorrectly) try to argue that validation is a weakness of Template Driven forms. I will show that Angular validation, as taught, is a weakness of Reactive forms as well. What we need is a model-driven validation library that integrates with both modalities, one that is powerful and easy to use in the scenarios you wish you could handle today. Of course I'll show you an open-source validation library that we wrote and have used at our biggest Angular client for the last 3 years.</p></blockquote><h4><a href="https://blog.herodevs.com/functional-router-guards-in-angular-15-open-the-door-to-happier-code-4a53bb60f78a">Functional router guards in Angular 15 open the door to happier code</a> | by <a href="https://twitter.com/KateSky8">Kate Sky</a></h4><blockquote><p>How to seamlessly migrate deprecated class guards into functional ones</p></blockquote><p></p><h4><a href="https://itnext.io/angular-signals-the-future-of-angular-395a69e60062">Angular &#128678; Signals &#128225; (The future of Angular)</a> | by <a href="https://twitter.com/zzayani17">Zied Zayani</a></h4><blockquote><p>Why and How Using Angular Signals</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=sbFMKoah4hQ">Getting Started w/Angular Reactivity: Tour of Heroes</a> | by <a href="https://twitter.com/brandontroberts">Brandon Roberts</a></h4><blockquote><p>Let's take a look through everyone's favorite Angular demo application, the Tour of Heroes, but with a fresh look using Signals for Reactivity.</p></blockquote><p></p><h2>#ngPodcasts</h2><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/how-to-succeed-in-content-creation-aia-373">How to Succeed in Content Creation - AiA 373 | by Adventures in Angular</a></h4><blockquote><p>Chuck and Lucas join this week's panelist episode as they talk about "content creation". They start off as they dive into different ways of monetizing your content. Additionally, they talk about approaches on how to capture the interest of the audience to get them to subscribe to your courses.&nbsp;</p></blockquote><p></p><p></p><h2>#ngCommunity</h2><h4><a href="https://www.youtube.com/watch?v=AQV4WFldwlY">Angular LTS support starting with Nx 15.7</a> | by <a href="https://twitter.com/zackderose">Zack</a></h4><blockquote><p>Each major version of the Angular framework goes with a major version of the Angular CLI. Similarly, this was also the case for Nx. Starting with 15.7 we detach Angular and Nx, allowing Nx to support all the Angular LTS versions.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BY0G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BY0G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BY0G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BY0G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BY0G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BY0G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg" width="510" height="286.875" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:510,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BY0G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BY0G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BY0G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BY0G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c4c1aa-c4a3-4a2d-9e89-60cbe7832e06_1280x720.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Issue #69: Strategy Design Pattern in Angular Source Code, DestroyRef Provider, TypeScript Magic behind NgRx APIs, RouterTestingHarness]]></title><description><![CDATA[Authors featured: @AScottAngular @eugeniyoz @DecodedFrontend @NetanelBasal @ipwanciu @joshuamorony @tim_deschryver @brandontroberts]]></description><link>https://angularweekly.substack.com/p/issue-69-strategy-design-pattern</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-69-strategy-design-pattern</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Sun, 05 Mar 2023 19:18:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Dcwj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><h4><a href="https://blog.angular.io/write-better-tests-without-router-mocks-stubs-bf5fc95c1c57">Write better tests without Router mocks/stubs</a> | by <a href="https://twitter.com/AScottAngular">Andrew Scott</a></h4><blockquote><p>The <a href="https://angular.io/api/router/testing/RouterTestingHarness">RouterTestingHarness</a> was released in Angular 15.2 to streamline tests for components and services that depend on the <code>Router</code>.</p><p>Let&#8217;s cover a test scenario and compare the mock/stub and spy approach to what the test looks like with new <code>RouterTestingHarness</code>.</p></blockquote><p></p><h4><a href="https://medium.com/itnext/angular-for-junior-developers-mapping-the-observables-5af7f7fd8e96">Angular for Junior Developers: Mapping the Observables</a> | by <a href="https://twitter.com/eugeniyoz">OZ</a></h4><blockquote><p>RxJS has a long list of operators. Some of them are extremely powerful, but not so easy to learn from the first attempt: they allow you to make nested observables in your observables.</p><p>In every example of this article, we&#8217;ll use a &#8220;main observable&#8221; and will add nested observables.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=d25ZFIdMxr4">Design Patterns in Angular Source Code - Strategy Design Pattern</a> | by <a href="https://twitter.com/DecodedFrontend">Decoded Frontend (Dmytro Mezhenskyi)</a></h4><blockquote><p>Today I continue a video series where I try to reveal classical GoF design patterns in Angular source code. In the previous video we learned how Design Pattern Bridge is used to Design the Angular forms library and today I am going to talk about the Strategy Design pattern and how it was used to design the ASYNC pipe in Angular. Enjoy the video and I hope you will learn something new today.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=4FkFmn0LmLI">Angular is about to get its most IMPORTANT change in a long time...</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>Angular just released a preview of a prototype for their own implementation of signals as a new reactive primitive for the framework. This will help modernise the framework, improve change detection, and provide a more consolidated learning journey for new Angular developers.</p></blockquote><p></p><h4><a href="https://timdeschryver.dev/blog/angular-standalone-components-and-angular-testing-library-make-component-tests-easier">Angular standalone components and Angular Testing Library make component tests easier</a> | by <a href="https://twitter.com/tim_deschryver">Tim Deschryver</a></h4><blockquote><p>Standalone components give you a better foundation to build on, as your Angular component becomes less affected by its internals. It doesn't matter if the component has its own template, or if it's using child components. This makes your test cases less brittle than before with Angular Modules.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=V6eHIvwDFP4">Revealing the TypeScript Magic behind NgRx APIs</a> | by <a href="https://twitter.com/brandontroberts">Brandon Roberts</a></h4><blockquote><p>Ever wondered how NgRx integrates type-safety into its APIs? Marko from the NgRx team shows advanced TypeScript usage within the framework.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dcwj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dcwj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Dcwj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Dcwj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Dcwj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dcwj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg" width="454" height="255.375" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:454,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Dcwj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Dcwj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Dcwj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Dcwj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faed5ab09-28b3-4041-a5a6-b413c1dcd57b_1280x720.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><a href="https://netbasal.com/getting-to-know-the-destroyref-provider-in-angular-9791aa096d77">Getting to Know the DestroyRef Provider in Angular</a> | by <a href="https://twitter.com/NetanelBasal">Netanel Basal</a></h4><blockquote><p>Angular <a href="https://github.com/angular/angular/blob/main/CHANGELOG.md#1600-next1-2023-03-01">v16</a> has introduced a new provider called <code>DestroyRef</code>, which allows for registering destroy callbacks for a specific lifecycle scope. This feature is applicable to components, directives, pipes, embedded views, and instances of <code>EnvironmentInjector</code>.</p></blockquote><p></p><h4><a href="https://yon.fun/angular-lifecycle-hooks/">Complete Guide to Angular Lifecycle Hooks</a> | by <a href="https://twitter.com/ipwanciu">Ion Prodan</a></h4><blockquote><p>In this guide, we will take a dive into the <a href="https://yon.fun/angular-lifecycle-hooks/">Angular component lifecycle hooks</a> and explore how you can use them to manage the application better.</p></blockquote><h2></h2><div><hr></div><h2>#ngPodcasts</h2><p></p><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/functional-programming-in-typescript-aia-371">Functional Programming in TypeScript - AiA 371| by Adventures in Angular</a></h4><blockquote><p>Lucas Paganini is the CEO of <a href="https://t.co/MK3EcQQcyE">unvoid.com</a>. He takes on this week's solo episode to talk about a library called, "fp-ts". It gives developers access to popular patterns and secure abstractions from typed functional languages in Typescript. He discusses some of the issues that the library resolves.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Issue #68: Reactivity with Signals is coming to Angular, Angular Material components testing, Angular Setup And Workflow, Nx 15.7]]></title><description><![CDATA[Authors featured: @danywalls @brandontroberts @mfpears @juristr @kreuzercode @maxkoretskyi]]></description><link>https://angularweekly.substack.com/p/issue-68-reactivity-with-signals</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-68-reactivity-with-signals</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Mon, 20 Feb 2023 23:15:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fbde1655-b8ce-4f1a-8a1f-d0f94398b38d_1200x600.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/synalx/status/1625946905116315649&quot;,&quot;full_text&quot;:&quot;After months of research, experimentation, and design, I'm so excited to share this project with our community.\n\nThe best thing about it, in my opinion? Everyone benefits! &quot;,&quot;username&quot;:&quot;synalx&quot;,&quot;name&quot;:&quot;Alex Rickabaugh&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Feb 15 19:55:25 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{&quot;full_text&quot;:&quot;Today we are excited to open the first PR of our exploration into fine-grained reactivity! &#128678;\n\nThis is the foundation to allow prototyping &amp;amp; amplify the value of an upcoming RFC on our plans to introduce a new reactive primitive into Angular.\n\nRead more: https://t.co/juKz9phIFP&quot;,&quot;username&quot;:&quot;angular&quot;,&quot;name&quot;:&quot;Angular&quot;},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:19,&quot;like_count&quot;:160,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;video_preview_media_key&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p></p><h2>#ngTutorials</h2><h4><a href="https://dev.to/this-is-angular/i-changed-my-mind-angular-needs-a-reactive-primitive-n2g">I changed my mind. Angular needs a reactive primitive</a> | by <a href="https://twitter.com/mfpears">Mike Pearson</a></h4><blockquote><p>Angular developers have waited 7 years for better integration with RxJS, but this doesn't seem to be happening. Instead, the Angular team wants its own <a href="https://twitter.com/pkozlowski_os/status/1557403017024077824">reactive primitive</a> that can't even handle asynchronous reactivity.</p><p>This made me angry at first, but after a lot of thinking and talking with other developers, I now believe that a reactive primitive could provide an overall better developer experience than just better RxJS support, even for the most diehard RxJS fans.</p></blockquote><p></p><h4><a href="https://angularexperts.io/blog/material-component-testing">Angular Material components testing</a> | by <a href="https://twitter.com/kreuzercode">Kevin Kreuzer</a></h4><blockquote><p>How and why to use Angular Materials component harness to write reliable, stable and readable component tests</p></blockquote><p></p><h4><a href="https://indepth.dev/posts/1515/deep-dive-into-the-onpush-change-detection-strategy-in-angular">Deep dive into the OnPush change detection strategy in Angular</a> | by <a href="https://twitter.com/maxkoretskyi">Max Koretskyi</a></h4><blockquote><p>Angular implements two strategies to control change detection behavior on the level of individual components. Let&#8217;s now explore those strategies in greater detail.</p></blockquote><p></p><h4><a href="https://www.danywalls.com/i-dont-need-a-state-manager-in-angular-or-am-i-just-delaying-his-arrival">I Don't Need a State Manager in Angular, or am I just delaying his arrival?</a> | by <a href="https://twitter.com/danywalls">Dany Paredes</a></h4><blockquote><p>We have to build an app with the following sections the home, profile, orders, and payment.</p><ul><li><p>Each section must allow saving data in the state.</p></li><li><p>The home must render data from each section.</p></li><li><p>Each Order discount from the balance.</p></li></ul><p>We will use Rxjs Behavior subject to keep state and some rxjs operators to simplify and combine some operators.</p></blockquote><p></p><h2></h2><div><hr></div><h2>#ngPodcasts</h2><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/angular-setup-and-workflow-aia-370">Angular Setup And Workflow - AiA 370 | by Adventures in Angular</a></h4><blockquote><p>Chuck, Lucas, and Subrat join this panelist episode to talk about setup and workflow for working in angular apps. They begin by discussing their thoughts on Visual Studio Code. Additionally, they tackle its features and VS code extensions that make working with angular apps easier.</p></blockquote><h2></h2><div><hr></div><h2>#ngCommunity</h2><h4><a href="https://www.youtube.com/watch?v=ov0rSrZT4lk">Reactivity with Signals is coming to Angular ...</a> | by <a href="https://twitter.com/brandontroberts">Brandon Roberts</a></h4><blockquote><p>After many months of internal discussion and prototyping, the Angular Team has begun an open discussion about bringing a reactive primitive to the core framework. Angular Team member Alex Rickabaugh joins me to discuss the upcoming RFCs and details!</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=IStJODzZSoc">What's new in Nx 15.7?</a> | by <a href="https://twitter.com/juristr">Juri Strumpflohner</a></h4><blockquote><p>Another feature packed-release that introduces first-class Node backend development support, Lockfile parsing &amp; pruning (&#128293; for Docker), a more flexible and customizable Webpack config in React apps, Storybook v7 beta support, and improvements to Angular. Have a look and let us know what you like the most :)</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Issue #67: #ngGames, Internal Architecture of Angular Forms, Becoming a Google Developer Expert in Angular]]></title><description><![CDATA[Authors featured: @ipwanciu @DecodedFrontend @joshuamorony @tim_deschryver]]></description><link>https://angularweekly.substack.com/p/issue-67-nggames-internal-architecture</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-67-nggames-internal-architecture</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Tue, 14 Feb 2023 09:38:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!q6et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q6et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q6et!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q6et!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q6et!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q6et!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q6et!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg" width="332" height="249" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:480,&quot;resizeWidth&quot;:332,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!q6et!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q6et!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q6et!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q6et!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97258665-ee2f-4e3a-9cf8-5f2b0609568f_480x360.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><a href="https://www.youtube.com/watch?v=k12AfVnhVc8">Building Games and Q/A with the Angular Team | February 2023 | #ngGames</a> | by <a href="https://www.youtube.com/@Angular">Angular</a></h4><blockquote><p>Angular Community, join Jeremy Elbourn and Mark Thompson as they answer questions and have some fun! We'll answer questions and most of all, try to build a game!</p></blockquote><div><hr></div><h2>#ngTutorials</h2><h4></h4><h4><a href="https://timdeschryver.dev/blog/get-easy-access-to-angular-route-and-query-parameters-with-zod">Get easy access to Angular route and query parameters with zod</a> | by <a href="https://twitter.com/tim_deschryver">Tim Deschryver</a></h4><blockquote><p>To get access to route and query parameters in Angular, you need to manually parse the <code>ActivatedRoute</code> instance. While this is not hard, it can quickly bloat your codebase. Until Angular provides a better and typesafe way to access route and query parameters, you can use <a href="https://zod.dev/">zod</a> to make it easier.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=AReW_ET90KM">The trick to make any IMPERATIVE code DECLARATIVE instantly</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>We don't have control over what 3rd party libraries do, and sometimes those libraries are going to have an imperative API. Here's a little trick you can use to keep your codebase declarative, but still utilise those imperative APIs.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=TwPcU7Zu3nI">Internal Architecture of Angular Forms - GoF Design Pattern in Action</a> | by <a href="https://twitter.com/DecodedFrontend">Decoded Frontend (Dmytro Mezhenskyi)</a></h4><blockquote><p>Since I started investigating the source code of Angular, I found a few classical design patterns used to implement some framework features. In this video, I will share with you one of them used to design the Angular Forms package. In the first part of the video, you will learn what a Bridge design pattern is and how it was used in Angular Forms making them so flexible. I hope you will learn something new from this video and if you find this helpful video please share it with your colleagues.</p></blockquote><p></p><h4><a href="https://yon.fun/angular-cli/">Angular CLI: Command Line Interface Guide</a> | by <a href="https://twitter.com/ipwanciu">Ion Prodan</a></h4><blockquote><p>Discover the most commonly used options for generating new components and services, and explore the features that make Angular CLI a must-have for Angular projects.</p></blockquote><p></p><h2>#ngPodcasts</h2><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/becoming-a-google-developer-expert-in-angular-aia-369">Becoming a Google Developer Expert in Angular - AiA 369 | by Adventures in Angular</a></h4><blockquote><p>Alain Chautard is a certified Google Developer in Angular and he works as an individual consultant for Angular projects. He joins the show to discuss his career as an Angular expert and Angular mentor. He talks about his projects and his blog. He offers advice on how to become a Google Developer Expert and discusses his experience in the field.</p></blockquote><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Issue #66: Angular Standalone migration, functional Effects in NgRx, Tailwind CSS, Angular Standalone Applications with Nx]]></title><description><![CDATA[Authors featured: @joshuamorony @GouravKajal @tim_deschryver @brandontroberts @laforge_toma @DeborahKurata @zackderose]]></description><link>https://angularweekly.substack.com/p/issue-66-angular-standalone-migration</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-66-angular-standalone-migration</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Tue, 07 Feb 2023 22:12:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4uxP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>#ngTutorials</h2><h4><a href="https://www.youtube.com/watch?v=WC3hiMiH5kI">The most compelling reason to learn Angular in 2023</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>It turns out that Angular might be a little more popular than we all think, and the job opportunities for Angular might also be going unnoticed. This video presents some compelling reasons for why you might want to learn Angular in 2023.</p></blockquote><p></p><h4><a href="https://timdeschryver.dev/blog/i-tried-the-angular-standalone-migration-and-here-is-the-result">I tried the Angular Standalone migration, and here is the result</a> | by <a href="https://twitter.com/tim_deschryver">Tim Deschryver</a></h4><blockquote><p>Last week <a href="https://twitter.com/mgechev/">Minko Gechev</a> tweeted about an Angular schematic to automate the migration from <code>@NgModules</code> to the standalone API. Of course, I had to try out this migration myself.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=KjpzdzH7-Lg">You can now put all of your NgRx State where?!</a> | by <a href="https://twitter.com/brandontroberts">Brandon Roberts</a></h4><blockquote><p>With NgRx v15.2, functional Effects were introduced, which means you can create Effects without using classes. Where will you put your NgRx state now?</p></blockquote><p></p><h4><a href="https://itnext.io/stop-being-scared-of-injectiontokens-ab22f72f0fe9">Stop being scared of InjectionTokens</a> | by <a href="https://twitter.com/laforge_toma">Thomas Laforge</a></h4><blockquote><p>Injection Tokens seem to intimidate many developers. We don&#8217;t understand what they are, how to use them, and their purpose.</p><p>To overcome the fear of this feature, it is important to have a basic understanding of how Angular&#8217;s Dependency Injection works. <em>(A separate article will dive deeper into the inner workings of Angular&#8217;s DI system for a full understanding)</em>.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=rQTSMbeqv7I">RxJS Best Practices Aren't Always Black and White</a> | by <a href="https://twitter.com/DeborahKurata">Deborah Kurata</a></h4><blockquote><p>Some RxJS best practices are universal, like avoiding unsubscribe hell and nested subscriptions. But some are less black and white. Should you use a mergeMap, concatMap, or swichMap? When does it make sense to use a forkJoin vs combineLatest vs zip? And how can you best set up your RxJS pipeline to react to user actions. We'll look at these and other suggestions for successfully working with RxJS.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4uxP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4uxP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4uxP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4uxP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4uxP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4uxP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg" width="624" height="351" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:624,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4uxP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4uxP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4uxP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4uxP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e47ec-ee77-49e3-a0f0-9505e1c66652_1280x720.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h4><a href="https://javascript.plainenglish.io/angular-development-simplified-with-subjects-and-behavior-subjects-ae5cb622aba2">Angular Development Simplified with Subjects and Behavior Subjects</a> | by <a href="https://gouravkajal.medium.com/">Gourav Kajal</a></h4><blockquote><p>Understand the benefits, use cases, and best practices for using subjects and behavior subjects in Angular</p></blockquote><p></p><div><hr></div><h2>#ngPodcasts</h2><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/tailwind-css-aia-368">Tailwind CSS - AiA 368 | by Adventures in Angular</a></h4><blockquote><p>Chuck, Lucas, and Subrat join this panelist episode to talk about Tailwind CSS. They begin by discussing their perspectives and knowledge gained by using Tailwind. They tackle its benefits and impact on your applications.&nbsp;</p></blockquote><h2></h2><div><hr></div><h2>#ngCommunity</h2><h4><a href="https://www.youtube.com/watch?v=LYPVrWQNnEc">Angular Standalone Applications with Nx</a> | by <a href="https://twitter.com/zackderose">Zack "Supaship" DeRxJS</a></h4><blockquote><p>Learn how to take advantage of Nx in Standalone Angular Applications</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Issue #65: TypeScript 5.0 Beta, Change detection and component trees, Host directives, Angular & tRPC]]></title><description><![CDATA[#ngTutorials]]></description><link>https://angularweekly.substack.com/p/issue-65-typescript-50-beta-change</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-65-typescript-50-beta-change</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Tue, 31 Jan 2023 07:39:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ucLI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>#ngTutorials</h2><h4><a href="https://dev.to/valorsoftware/leveraging-angular-15-host-directives-52en">Leveraging @angular 15 host directives</a> | by <a href="https://github.com/N1XUS">Denis Severin</a></h4><blockquote><p>Not while ago, Angular team released a stable 15 version with few neat features, such as host directives.<br>In this article I will try to explain how to leverage the directive composition approach and move from old class-inheritance to a composition approach.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=-CoVmNvp_1g">Why you actually need RxJS (even if you don't realise it)</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>RxJS provides a way to explicitly handle asynchronous reactivity in your applications. This video explains what that means exactly, the difference to synchronous reactivity, and why the out of the box reactivity solutions Svelte and SolidJS might not be enough.</p></blockquote><p></p><h4><a href="https://dev.to/danywalls/common-pitfalls-in-angular-component-testing-3e1f">Common Pitfalls in Angular Component Testing</a> | by <a href="https://twitter.com/danywalls">Dany Paredes</a></h4><blockquote><p>This article focuses on the typical problems or issues to face when we start adding testing in a single component with dependencies like services and child components.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=2QgcMLAmm1s">Component-Less and Empty-Path Routes in Angular (2023)</a> | by <a href="https://twitter.com/DecodedFrontend">Decoded Frontend (Dmytro Mezhenskyi)</a></h4><blockquote><p>n this video, you will learn what component-less and empty-path routes in <a href="https://www.youtube.com/hashtag/angular">#angular</a> are. You will see some use cases when this pattern might be helpful and help you to make your code base more reliable and flexible. I hope you will learn something new today and if so, please share this video with your colleagues and friends.</p></blockquote><p></p><h4><a href="https://angularexperts.io/blog/angular-trpc">Angular &amp; tRPC</a> | by <a href="https://twitter.com/kreuzercode">Kevin Kreuzer</a></h4><blockquote><p>Maximum type safety across the entire stack. How to setup a fullstack app with Angular and tRPC.</p></blockquote><p><br></p><p></p><h4><a href="https://indepth.dev/posts/1512/change-detection-and-component-trees-in-angular-applications">Change detection and component trees in Angular applications</a> | by <a href="https://twitter.com/maxkoretskyi">Max Koretskyi</a></h4><blockquote><p>We can think of an Angular application as a tree of components. Under the hood, for components Angular uses a low-level abstraction called View. In this article we'll take a detailed look how component tree corresponds to a tree of views</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ucLI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ucLI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png 424w, https://substackcdn.com/image/fetch/$s_!ucLI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png 848w, https://substackcdn.com/image/fetch/$s_!ucLI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png 1272w, https://substackcdn.com/image/fetch/$s_!ucLI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ucLI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png" width="428" height="285.43131868131866" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:428,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;post&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="post" title="post" srcset="https://substackcdn.com/image/fetch/$s_!ucLI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png 424w, https://substackcdn.com/image/fetch/$s_!ucLI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png 848w, https://substackcdn.com/image/fetch/$s_!ucLI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png 1272w, https://substackcdn.com/image/fetch/$s_!ucLI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78647a80-db80-4bad-a6af-a4b85362e7f4_1839x1226.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><h2>#ngPodcasts</h2><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/latest-versions-of-ngrx-v14-v15-aia-367">Latest Versions Of NgRx v14 &amp; v15 - AiA 367 | by Adventures in Angular</a></h4><blockquote><p>Armen Vardanyan is a Google Developer Expert for Angular, and Frontend Team Lead at Volo. He returns to the show to discuss his article, "<a href="https://dev.to/ngrx/using-ngrx-packages-with-standalone-angular-features-53d8">Using NgRx Packages with Standalone Angular Features</a>". He talks about how to use NgRx packages with standalone features.</p></blockquote><h2></h2><div><hr></div><h2>#ngCommunity</h2><h4><a href="https://www.youtube.com/watch?v=7dm4Gif7A5o">Meetup: The Future of Angular</a> | by <a href="https://twitter.com/ManfredSteyer">Manfred Steyer</a></h4><h2></h2><div><hr></div><h2>#ngWeb</h2><h4><a href="https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/">Announcing TypeScript 5.0 Beta</a> | by <a href="https://twitter.com/drosenwasser">Daniel Rosenwasser</a></h4><blockquote><p>Armen Vardanyan is a Google Developer Expert for Angular, and Frontend Team Lead at Volo. He returns to the show to discuss his article, "<a href="https://dev.to/ngrx/using-ngrx-packages-with-standalone-angular-features-53d8">Using NgRx Packages with Standalone Angular Features</a>". He talks about how to use NgRx packages with standalone features.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Issue #64: Route Guard in Angular , Mastering Angular Structural Directives, Angular & tRPC, Angular's Custom Form Components ]]></title><description><![CDATA[#ngTutorials]]></description><link>https://angularweekly.substack.com/p/issue-64-route-guard-in-angular-mastering</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-64-route-guard-in-angular-mastering</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Sun, 22 Jan 2023 22:19:20 GMT</pubDate><enclosure url="https://s3.amazonaws.com/revue/profiles/images/000/338/534/thumb/LogoMakr-2wrDvq_%281%29.png?1636196656" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><h2>#ngTutorials</h2><h4><a href="https://itnext.io/everything-you-need-to-know-about-route-guard-in-angular-697a062d3198">Everything you need to know about route Guard in Angular</a> | by <a href="https://twitter.com/laforge_toma">Thomas Laforge</a></h4><blockquote><p>Routing is a significant aspect of any SPA application, and protecting these routes is often necessary. We may want to guard our routes for permission access or to prevent users from exiting a route by mistake if a form has not been submitted correctly. Angular provides a set of built-in guards that can be easily used for various use cases. In this article, I will demonstrate and explain each of the built-in guards provided and show you how to use them with some common examples.</p></blockquote><p></p><p></p><h4><a href="https://indepth.dev/posts/1511/improve-page-performance-and-lcp-with-ngoptimizedimage">Improve page performance and LCP with NgOptimizedImage</a> | by <a href="https://twitter.com/maciej_wwojcik">Maciej Wojcik</a></h4><blockquote><p>Explore mechanisms of NgOptimizedImage directive to improve overall page performance, targeting especially the Largest Contentful Paint (LCP) metric from Core Web Vitals. Enhance pages, make the best user experience and improve the web.</p></blockquote><p></p><p></p><h4><a href="https://dev.to/this-is-angular/mastering-angular-structural-directives-its-all-about-the-context-5hai">Mastering Angular Structural Directives - It&#8217;s all about the context</a> | by <a href="https://twitter.com/goetzrobin">Robin Goetz</a></h4><blockquote><p>Structural directives in Angular are one of the framework&#8217;s most powerful tools. We encounter them early in our Angular journeys. They are integral to developing even the most basic Angular applications.</p></blockquote><p></p><p></p><h4><a href="https://javascript.plainenglish.io/the-best-of-angular-a-collection-of-my-favorite-articles-of-2022-8015cb63fbc2">The best of Angular: a collection of my favorite resources of 2022</a> | by <a href="https://twitter.com/GergelySzerovay">Gergely Szerovay</a></h4><blockquote><p>Check out these resources to learn about what happened in the world of Angular last year.</p></blockquote><p></p><p></p><h4><a href="https://www.youtube.com/watch?v=lKdw_z9qmPU">Angular developers can learn Svelte so fast...</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>It turns out that a lot of the concepts and APIs of Angular and SvelteKit are quite similar from a developer perspective, which means the leap for Angular developers to learn SvelteKit is reasonably small. This video takes a look at some of the similarities.</p></blockquote><p></p><p></p><h4><a href="https://itnext.io/async-pipe-is-not-pure-948f7b24e2d1">Async pipe is not pure</a> | by <a href="https://twitter.com/Enea_Jahollari">Enea Jahollari</a></h4><blockquote><p>Yes, that&#8217;s normal! Why? Because of how Angular does change detection under the hood!</p></blockquote><p></p><p></p><h4><a href="https://www.youtube.com/watch?v=gp1db5xKqck">Angular &amp; tRPC</a> | by <a href="https://twitter.com/kreuzercode">Kevin Kreuzer</a></h4><blockquote><p>Do you want maximum type safety accross the entire stack? Let's talk about Angular &amp; tRPC.</p></blockquote><div><hr></div><p></p><h2>#ngPodcasts</h2><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/angular-s-custom-form-components-aia-366">Angular's Custom Form Components - AiA 366 | by Adventures in Angular</a></h4><blockquote><p>Charles, Lucas, and Subrat take on this week's panelist episode as they tackle all about Custom Form Components. Lucas starts off the episode by explaining different methods on how you can effortlessly and with ease create custom form components. Subrat also shares his own insight on some other techniques for creating forms depending on how complex your form is. Moreover, they discuss integrating custom form components with Angular forms API.</p></blockquote><div><hr></div><p></p><h2>#ngCommunity</h2><h4><a href="https://www.youtube.com/watch?v=NixN-es6-tc">Angular and the State of JavaScript 2022 is ... complicated</a> | by <a href="https://twitter.com/brandontroberts">Brandon Roberts</a></h4><blockquote><p>The State of JS 2022 is out and Angular is still a polarizing option in the front-end framework ecosystem.</p></blockquote><div><hr></div><p></p><p></p><h2>#ngQuote</h2><div class="pullquote"><p><em><a href="https://www.goodreads.com/quotes/406964-a-computer-is-like-a-violin-you-can-imagine-a">"A computer is like a violin. You can imagine a novice trying &#64257;rst a phonograph and then a violin. The latter, he says, sounds terrible. That is the argument we have heard from our humanists and most of our computer scientists. Computer programs are good, they say, for particular purposes, but they aren&#8217;t &#64258;exible. Neither is a violin, or a typewriter, until you learn how to use it."</a></em></p><p><em><a href="https://www.goodreads.com/quotes/406964-a-computer-is-like-a-violin-you-can-imagine-a"> Marvin Minsky</a></em></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Issue #63: Demystifying Angular Two Way Binding, Rendering cycle in Angular applications, The State of JS 2022 ]]></title><description><![CDATA[#ngTutorials]]></description><link>https://angularweekly.substack.com/p/issue-63-demystifying-angular-two</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-63-demystifying-angular-two</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Sun, 15 Jan 2023 23:06:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!C93y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><h2>#ngTutorials</h2><h4><a href="https://www.youtube.com/watch?v=vkmwbZV-ob8">Demystifying Angular Two Way Binding (2023)</a> | by <a href="https://twitter.com/DecodedFrontend">Decoded Frontend (Dmytro Mezhenskyi)</a></h4><blockquote><p>In this video, I will try to demystify Two way binding in Angular, so you will get a solid understanding of how it is really working. At the end of the video, you will be able to create two-way data binding also for any property of your custom components. I hope you will learn something new from this video and if so, please don't hesitate to share this video with your colleagues and friends.</p></blockquote><p></p><h4><a href="https://indepth.dev/posts/1510/rendering-cycle-in-angular-applications-browser-angular-and-zone-js-interaction">Rendering cycle in Angular applications &#8212; browser, angular and zone.js interaction</a> | by <a href="https://twitter.com/maxkoretskyi">Max Koretskyi</a></h4><blockquote><p>Modern web stack involves lots of moving parts. Let's take a look at all the actors and their functions in a typical Angular application.</p></blockquote><p></p><h4><a href="https://angularexperts.io/blog/total-guide-to-jest-esm-and-angular">Jest ESM - Total Guide To More Than 100% Faster Testing For Angular</a> | by <a href="https://twitter.com/tomastrajan">Tomas Trajan</a></h4><blockquote><p>Let's learn how to speed up our Angular Jest tests by more than 100% by switching to Jest ESM (a notoriously problematic migration) and how to solve all the troublesome issues that tend to pop up along the way!</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=skOTEbGwncE">The easier way to code Angular apps</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>Ever hear about "declarative" coding or "reactive" coding? These are concepts I struggled to properly understand and appreciate for a long time. This video aims to give a brief explanation that gets right to the heart of what this is all about and why it is beneficial.</p></blockquote><p></p><h4><a href="https://dev.to/angular/angular-eslint-rules-for-accessible-html-content-kf5">Angular ESLint Rules for Accessible HTML Content</a> | by <a href="https://twitter.com/sandikbarr">Sandi K Barr</a></h4><blockquote><p>Content accessibility for built-in HTML elements is the third and final category in this series on Angular ESLint accessibility rules. These rules validate several HTML attributes that developers commonly overlook regarding accessibility. They check for alt text on images, accessible content in buttons, links, and headings, and proper form labels and table header associations. Angular ESLint accessibility rules provide immediate guidance on accessibility best practices right in the code, resulting in more accessible and user-friendly Angular applications.</p></blockquote><h2></h2><div><hr></div><h2>#ngPodcasts</h2><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/writing-clean-http-service-methods-with-walid-bouguima-aia-365">Writing Clean Http Service Methods With Walid Bouguima - AiA 365 | by Adventures in Angular</a></h4><blockquote><p>Walid Bouguima is a Software Engineer at Hilti Group. He joins the show with Chuck, Lucas, and Subrat to discuss his article, " <strong>Angular Clean Http Service Methods: Handle Your Backend Communication With Ease</strong>". He explains his goals and reasons why he created this method and what advantages it may bring to developers in the Angular community. Moreover, the panel shares their own perspective and some tips about Walid's article.&nbsp;</p></blockquote><p></p><div><hr></div><h2>#ngCommunity</h2><h4><a href="https://www.youtube.com/watch?v=BkZiBuiOnRY">Moving Into Angular from the Backend with Perko &amp; Rivas | Roadmap to Learning Angular E7 | ng-conf</a></h4><blockquote><p>How does learning Angular compare to learning backend technologies? Is it easier to learn frontend concepts once you already know the backend? Chris Perko &amp; Giovanni Rivas, co-organizers of the Angular Community Meetup, share their experiences in this episode coming to Angular from jobs on the backend. They share insights, tips, and advice for making the transition but also for learning Angular in general.</p></blockquote><p></p><div><hr></div><h2>#ngWeb</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C93y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C93y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png 424w, https://substackcdn.com/image/fetch/$s_!C93y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png 848w, https://substackcdn.com/image/fetch/$s_!C93y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png 1272w, https://substackcdn.com/image/fetch/$s_!C93y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C93y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png" width="458" height="241.46500777604976" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:678,&quot;width&quot;:1286,&quot;resizeWidth&quot;:458,&quot;bytes&quot;:628888,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!C93y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png 424w, https://substackcdn.com/image/fetch/$s_!C93y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png 848w, https://substackcdn.com/image/fetch/$s_!C93y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png 1272w, https://substackcdn.com/image/fetch/$s_!C93y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F820d0176-b70a-4bc3-969b-19611b1a54cd_1286x678.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h4><a href="https://2022.stateofjs.com/en-US/">The State of JS 2022</a> </h4><blockquote><p>The 2022 edition of the annual survey about the latest trends in the JavaScript ecosystem.</p></blockquote><p></p><h4><a href="https://storybook.js.org/blog/storybook-ecosystem-ci/">Storybook Ecosystem CI</a> | by <a href="https://twitter.com/@mshilman">Michael Shilman</a></h4><blockquote><p>Upgrading npm packages can be a bit like crossing a minefield. Even a tiny patch upgrade can blow up your entire stack. Unfortunately, this kind of issue is common in modern open-source software. Packages often break due to bugs in their code, bugs in their dependencies, or incompatible transitive dependency upgrades.</p><p>As maintainers of Storybook&#8212;one of the most popular UI development tools&#8212;we're all too familiar with the terrors of package upgrades. That's why we've created <strong>Storybook Ecosystem CI</strong>, an early warning system to help protect our users from this chaotic environment.</p></blockquote><p></p><h2>#ngQuote</h2><div class="pullquote"><p><a href="https://www.goodreads.com/quotes/234986-walking-on-water-and-developing-software-from-a-specification-are">"Walking on water and developing software from a specification are easy if both are frozen" Edward V. Berard</a></p></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Issue #62: #ngGames, Incremental Builds with the Nx Cache, Dos & Don'ts On the Job As A Programmer, ngTemplateOutletInjector, Future of Storybook]]></title><description><![CDATA[Playing Games and Q/A with the Angular Team | January 2022 | #ngGames]]></description><link>https://angularweekly.substack.com/p/issue-62-nggames-incremental-builds</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-62-nggames-incremental-builds</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Tue, 10 Jan 2023 09:33:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Fs_A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b709db-d2fd-4964-b1db-2c1d0df45bc4_480x360.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fs_A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b709db-d2fd-4964-b1db-2c1d0df45bc4_480x360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Fs_A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b709db-d2fd-4964-b1db-2c1d0df45bc4_480x360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Fs_A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b709db-d2fd-4964-b1db-2c1d0df45bc4_480x360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Fs_A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b709db-d2fd-4964-b1db-2c1d0df45bc4_480x360.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fs_A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b709db-d2fd-4964-b1db-2c1d0df45bc4_480x360.jpeg" width="284" height="213" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69b709db-d2fd-4964-b1db-2c1d0df45bc4_480x360.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:480,&quot;resizeWidth&quot;:284,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fs_A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b709db-d2fd-4964-b1db-2c1d0df45bc4_480x360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Fs_A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b709db-d2fd-4964-b1db-2c1d0df45bc4_480x360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Fs_A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b709db-d2fd-4964-b1db-2c1d0df45bc4_480x360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Fs_A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b709db-d2fd-4964-b1db-2c1d0df45bc4_480x360.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><h4><a href="https://www.youtube.com/watch?v=b3qQnbNnCgM">Playing Games and Q/A with the Angular Team | January 2022 | #ngGames</a></h4><blockquote><p>Angular Community, join Jeremy and the "People's Champ" Jessica Janiuk as they kick off a year of gaming in Angular in 2023!</p></blockquote><p></p><div><hr></div><h2>#ngTutorials</h2><h4><a href="https://indepth.dev/posts/1509/overview-of-angulars-change-detection-operations-in-ivy">Overview of Angular&#8217;s Change Detection operations in Ivy</a> | by <a href="https://twitter.com/maxkoretskyi">Max Koretskyi</a></h4><blockquote><p>I set out to make a video explaining the specifics of how dependency injection works in Angular. But then I started to wonder if ChatGPT could do a better job at explaining it than me. So, now this video is a competition between myself (a Google Developer Expert for Angular) and ChatGPT.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=XE9dI8gSi9U">Have You Used ngTemplateOutletInjector Yet?</a> | by <a href="https://twitter.com/Nartc1410"> Chau Tran</a></h4><blockquote><p>This lightning talk will introduce you to ngTemplateOutletInjector, a new Input on the ngTemplateOutlet directive. Community expert, Chau Tran will quickly show a use-case with Dependency Injection, the limitation of ContentProjection, and how ngTemplateOutletInjector helps.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=ZzC-hfYQXvQ">Can AI explain the most challenging Angular concept?</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>I set out to make a video explaining the specifics of how dependency injection works in Angular. But then I started to wonder if ChatGPT could do a better job at explaining it than me. So, now this video is a competition between myself (a Google Developer Expert for Angular) and ChatGPT.</p></blockquote><h2></h2><div><hr></div><h2>#ngPodcasts</h2><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/standalone-components-with-marek-panti-aia-364">Standalone Components With Marek Panti - AiA 364 | by Adventures in Angular</a></h4><blockquote><p>Marek Panti is an Angular developer at UNIQA Insurance Group AG. He joins the panel to talk about his article, "Angular Standalone Components". Standalone components simplify the process of creating Angular applications. He explains how he was able to come up with the idea for his article.</p></blockquote><p></p><h2></h2><div><hr></div><h2>#ngCommunity</h2><h4><a href="https://www.youtube.com/watch?v=1s6Tx-uJXmw">Dos &amp; Don'ts On the Job As A Programmer | Gechev, Saling, Bell, Newsom | Angular Community Meetup</a></h4><blockquote><p>Having a successful career isn't only about your programming skills. A lot of it depends on your day-to-day habits &amp; decisions as well. But what are those habits? Which ones boost your career? Which ones hinder you? </p><p>Get answers to all these questions and more as Brooke Avery &amp; Chris Perko from the Angular Community Meetup discuss the topic with Angular Product Lead Minko Gechev, GitHub Engineer Team Lead Liz Saling, Ward Bell, President of IdeaBlade, and Lara Newsom, Software Engineering Technical Lead from Cisco.</p></blockquote><p></p><h4><a href="https://ng-journal.com/blog/2023-01-06-incremental-builds-with-the-nx-cache/">Incremental Builds with the Nx Cache</a> | by <a href="https://twitter.com/StefanvHaas"> Stefan Haas</a></h4><blockquote><p>Once your application is growing, the build times and testing times are growing as well. This affects all of the developers locally running the application on their machine but also affects the build pipeline. It is not rare to see build/test times of more than 10 minutes and even more. In order to improve the developer experience and reduce the time the build pipeline takes, you should consider going for an incremental build and remote caching. There are multiple ways of achieving this goal, but easiest solution is to use the Nx Cloud, which I will introduce in this article.</p></blockquote><p></p><h4><a href="https://www.youtube.com/watch?v=iygb-KhAeik">Wrap any command with Nx Run-Commands</a> | by <a href="https://twitter.com/juristr">Juri Strumpflohner</a></h4><blockquote><p>The built-in "run-command" executor can be powerful to add custom commands to existing "project.json" files. And it even got simpler in 15.3. </p></blockquote><p></p><h2></h2><div><hr></div><h2>#ngWeb</h2><h4><a href="https://storybook.js.org/blog/future-of-storybook-in-2023/">Future of Storybook in 2023</a> | by <a href="https://twitter.com/@mshilman">Michael Shilman</a></h4><blockquote><p>Storybook is the industry-standard UI development workshop for components and pages. It's used by BBC, Netflix, Twitter, and thousands more teams. Our goal is to make the tools and techniques used by the best frontend teams available to everyone.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Issue #61: Discover the power of @Ngrx/component-store, NgTemplateOutlet in Angular, An HTML-first Mental Model]]></title><description><![CDATA[Authors featured: @SCooperDev @laforge_toma @tim_deschryver @chrislydemann @joshuamorony @zackderose @c5n_c8u @brandontroberts]]></description><link>https://angularweekly.substack.com/p/issue-61-discover-the-power-of-ngrxcomponent</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-61-discover-the-power-of-ngrxcomponent</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Sun, 01 Jan 2023 21:22:58 GMT</pubDate><enclosure url="https://s3.amazonaws.com/revue/profiles/images/000/338/534/thumb/LogoMakr-2wrDvq_%281%29.png?1636196656" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>#ngTutorials</h2><h4><a href="https://www.youtube.com/watch?v=PF3mFOZn3MQ">WTF is a HOT observable?</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>There seems to be some kind of important difference between "hot" and "cold" observables, but trying to grasp what that difference is can be confusing. This video aims to make hot observables easier to understand.</p></blockquote><div><hr></div><h4><a href="https://medium.com/@thomas.laforge/discover-the-power-of-ngrx-component-store-to-create-a-local-component-state-53e3a0af7970">Discover the power of @Ngrx/component-store to create a Local Component State</a> | by <a href="https://twitter.com/laforge_toma">Thomas Laforge</a></h4><blockquote><p> The fifth challenge will teach you some good practices for architecture and creating scalable and readable components using Angular by refactoring a small Todo Application step by step. You will learn how to create reactive code with good separation of concerns and a great User and Developer eXperience. We will use and discover @Ngrx/component-store to create our local Component Store as well as @tomalaforge/ngrx-callstate-store to handle our loading and error states.</p></blockquote><div><hr></div><h4><a href="https://www.youtube.com/watch?v=uY_Cy_wUmQI">Component-First Architecture with Angular Standalone Components</a> | by <a href="https://twitter.com/FerryColum">Colum Ferry at NG-DE 2022</a></h4><blockquote><p>Angular is releasing Standalone Components, and with that we need a new architecture approach. Component-First Architecture is where our components define and drive the user experience of our application. Anything that impacts the user&#8217;s experience should be handled via our components, as it is our components that the user interacts with. In this talk, I&#8217;ll describe what Component-First Architecture is, and how to implement it in Angular with the Angular Standalone Components</p></blockquote><div><hr></div><h4><a href="https://www.youtube.com/watch?v=RSf7DlJXoGQ">switchMap vs concatMap vs mergeMap ... Oh My!</a> | by <a href="https://twitter.com/DeborahKurata">Deborah Kurata</a></h4><blockquote><p>Angular/RxJS Quick Take: Understand the difference between switchMap, concatmap, and mergeMap </p></blockquote><div><hr></div><h4><a href="https://www.youtube.com/watch?v=vfPVdJ2oQlM">NgTemplateOutlet in Angular - Everything You Have to Know (2022)</a> | by <a href="https://twitter.com/DecodedFrontend">Decoded Frontend (Dmytro Mezhenskyi)</a></h4><blockquote><p>This video will teach you how to utilize an Angular ngTemplateOutlet directive to create reusable components with customizable and extensible views. You will learn everything you have to know about this directive. We will cover all available features like creating views from templates, providing template context data, and controlling the proper Angular Dependency Injection flow. So if you watch the video until the end, you can be sure that you will be able to handle 80% of all possible use cases related to component view customization.</p></blockquote><div><hr></div><p></p><h2>#ngWeb</h2><h4><a href="https://calendar.perfplanet.com/2022/an-html-first-mental-model/">An HTML-first Mental Model</a> | by <a href="https://webperf.social/@noam">Noam Rosenthal</a></h4><blockquote><p>Writing a fast vanilla-based movies app, how to make it fast while maintaining a nice-ish framework-less developer experience?</p></blockquote><div><hr></div><p></p><h2>#ngCommunity</h2><h4><a href="https://www.youtube.com/watch?v=b0bDILh4p3Q">Nx 2022 Year in Review</a> | by <a href="https://twitter.com/zackderose">Zack "Supaship" DeRxJS</a></h4><blockquote><p>Nx is picking up speed in 2022, and accelerating into the new year! </p></blockquote><div><hr></div><h2>#ngQuote</h2><div class="pullquote"><p><a href="https://www.goodreads.com/quotes/11027464-confusion-is-part-of-programming">"Confusion is part of programming" - Felienne Hermans</a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Issue #60: Nx 15.4, Generic Component Types, Mastering Injectable Services, Angular Testing Library with Test Harnesses]]></title><description><![CDATA[Authors featured: @SCooperDev @laforge_toma @tim_deschryver @chrislydemann @joshuamorony @zackderose @c5n_c8u @brandontroberts]]></description><link>https://angularweekly.substack.com/p/issue-60-nx-154-generic-component</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-60-nx-154-generic-component</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Mon, 26 Dec 2022 18:30:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IBtA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5dd726-ad72-4f79-a583-b0411638e7f1_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>#ngTutorials</h2><h4><a href="https://dev.to/angular/does-angular-support-generic-component-types-4fkm">Does Angular Support Generic Component Types?</a>  | by <a href="https://twitter.com/SCooperDev">Stephen Cooper</a></h4><blockquote><p>You may be familiar with writing <a href="https://www.typescriptlang.org/docs/handbook/2/generics.html">Typescript Generics</a> like <code>Grid&lt;IRowData&gt;</code> but how does this work for Angular components? We can't provide generic types to our template selectors so how does Angular support generic components?</p><p>In this article we will explain how Angular does it, but also how you can help the Angular Compiler be more accurate in complex components.</p></blockquote><div><hr></div><h4><a href="https://itnext.io/mastering-injectable-services-a-comprehensive-guide-6c2c0f5f48a2">Mastering Injectable Services: A Comprehensive Guide</a> | by <a href="https://twitter.com/laforge_toma">Thomas Laforge</a> </h4><blockquote><p>In Angular, the <code>@Injectable</code> decorator is used to create services that can be provided to other components through Angular&#8217;s dependency injection system. These services can then inject other services provided by the dependency injection system <em>(DI)</em> inside their classes.</p><p>To declare a service injectable, we simply add the decorator on top of our class:</p><pre><code>@Injectable()
class MyService {
}</code></pre><p>However, just adding the <code>@Injectable</code> decorator does not automatically provide the service in Angular's DI system. Let's explore the various ways in which services can be provided in Angular.</p></blockquote><div><hr></div><h4><a href="https://timdeschryver.dev/blog/using-angular-testing-library-with-test-harnesses">Using Angular Testing Library with Test Harnesses</a> | by <a href="https://twitter.com/tim_deschryver">Tim Deschryver</a></h4><blockquote><p>The test cases you write for your own components are mostly the simple ones to write because you know the code base and you're in control of the component's HTML structure. If it's needed you can always change the HTML structure in your template to make it easier to query the element that is needed in a test.</p><p>But, what if you want to write tests for a third-party component? Or, for a component that another team wrote? In these cases, you don't have control over the HTML structure and you can't make changes to it. This can make it harder to write tests, and it definitely makes it harder to write maintainable tests.</p><p>Even for the components that live in your code base, it can be tricky to query the correct element while keeping your test readable and resilient to changes.</p><p>In this post, we go over the combination of <a href="https://testing-library.com/docs/angular-testing-library/intro/">Angular Testing Library</a> and <a href="https://material.angular.io/cdk/test-harnesses/overview">Test Harnesses</a> to make writing tests easier and enjoyable.</p></blockquote><div><hr></div><h4><a href="https://www.youtube.com/watch?v=Pn9-v_WAplg">How To Implement Angular Micro Frontends With Module Federation and Nx</a> | by <a href="https://twitter.com/chrislydemann">Christian Lydemann</a></h4><blockquote><p>In this video, I will cover how to implement micro frontends with module federations and Nx</p></blockquote><div><hr></div><h4><a href="https://www.youtube.com/watch?v=YkkdYp8BDgY">Component Testing w/Playwright and Angular [Live Coding]</a> | by <a href="https://twitter.com/brandontroberts">Brandon Roberts</a></h4><blockquote><p>Working on an example application that uses Playwright for Component Testing with Analog's Vite Plugin</p></blockquote><div><hr></div><h4><a href="https://www.youtube.com/watch?v=p39ViCa6Smo">Now AI is DESIGNING my entire app in minutes...</a> | by <a href="https://twitter.com/joshuamorony">Joshua Morony</a></h4><blockquote><p>The Midjourney AI can generate some pretty impressive mobile app user interface concepts. In this video, we see what is involved in taking one of those concepts and converting it into an actual application.</p></blockquote><div><hr></div><h4><a href="https://catalincodes.com/posts/how-to-add-storybook-to-angular">How to add Storybook and Chromatic to your Angular monorepo</a> | by <a href="https://twitter.com/c5n_c8u">Catalin Ciubotaru</a></h4><blockquote><p>Storybook is an amazing tool, and you should use it if you&#8217;re thinking about starting a reusable component library for your project(s).</p></blockquote><h2></h2><div><hr></div><h2>#ngPodcasts</h2><h4><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/state-management-with-rxjs-aia-363">State Management with RxJS - AiA 363 | by Adventures in Angular</a></h4><blockquote><p>Amal Ayyash is a UX Designer and Front-end Developer. and her current main focus is Angular. She joins Chuck and Lucas to discuss her article, &#8220;RxJS-based state management in Angular&#8221;. She starts the show off by explaining the reason why she chose to use RxJS to create state management instead of using NgRX. She also gives advice to other developers, encouraging them to use their own frameworks or codes rather than third-party solutions.</p></blockquote><div><hr></div><h4><a href="https://www.spreaker.com/user/ng-conf/ap-show-s4e17-sandi-barr-edit-2">S4 E17 - Accessibility and Enterprise Applications with Sandi Barr | by The Angular Plus Show</a></h4><blockquote><p>It is too easy to forget about application accessibility which causes very real problems for every day users. Join us as we talk with Sandi Barr about steps we can take to make accessibility an integral part of not only our application but also our CICD pipelines.</p></blockquote><p></p><div><hr></div><h2>#ngCommunity</h2><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IBtA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5dd726-ad72-4f79-a583-b0411638e7f1_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IBtA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5dd726-ad72-4f79-a583-b0411638e7f1_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IBtA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5dd726-ad72-4f79-a583-b0411638e7f1_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IBtA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5dd726-ad72-4f79-a583-b0411638e7f1_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IBtA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5dd726-ad72-4f79-a583-b0411638e7f1_1280x720.jpeg" width="308" height="173.25" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4b5dd726-ad72-4f79-a583-b0411638e7f1_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:308,&quot;bytes&quot;:94223,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!IBtA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5dd726-ad72-4f79-a583-b0411638e7f1_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IBtA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5dd726-ad72-4f79-a583-b0411638e7f1_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IBtA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5dd726-ad72-4f79-a583-b0411638e7f1_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IBtA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5dd726-ad72-4f79-a583-b0411638e7f1_1280x720.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><h4><a href="https://www.youtube.com/watch?v=G02THNy3PcE">Nx 15.4 is out! Here's all you need to know</a> | by <a href="https://twitter.com/zackderose">Zack "Supaship" DeRxJS</a> </h4><blockquote><p>Nx is at it again, with another monster release 2 weeks after the MASSIVE 15.3 launch. Here's everything you need to know about what's new for Nx 15.4, in under 10 minutes!</p></blockquote><h2></h2><div><hr></div><h2>#ngQuote</h2><div class="pullquote"><p><a href="https://www.goodreads.com/quotes/393595-a-language-that-doesn-t-affect-the-way-you-think-about">"A language that doesn't affect the way you think about programming is not worth knowing." - Alan J. Perlis</a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Issue #59: #ngGames, Custom Builder from Scratch, Deep Dive into Angular Version 15 with Emma Twersky, Angular DevTools]]></title><description><![CDATA[Playing Games and Q/A with the Angular Team | December 2022 | #ngGames]]></description><link>https://angularweekly.substack.com/p/issue-59-nggames-custom-builder-from</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-59-nggames-custom-builder-from</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Mon, 26 Dec 2022 13:37:21 GMT</pubDate><enclosure url="https://s3.amazonaws.com/revue/profiles/images/000/338/534/thumb/LogoMakr-2wrDvq_%281%29.png?1636196656" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ftpR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F531e3325-24c6-47db-8599-1640c1e932f6_280x280.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ftpR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F531e3325-24c6-47db-8599-1640c1e932f6_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ftpR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F531e3325-24c6-47db-8599-1640c1e932f6_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ftpR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F531e3325-24c6-47db-8599-1640c1e932f6_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ftpR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F531e3325-24c6-47db-8599-1640c1e932f6_280x280.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ftpR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F531e3325-24c6-47db-8599-1640c1e932f6_280x280.jpeg" width="280" height="280" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/531e3325-24c6-47db-8599-1640c1e932f6_280x280.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Playing Games and Q/A with the Angular Team | December 2022 | #ngGames&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Playing Games and Q/A with the Angular Team | December 2022 | #ngGames" title="Playing Games and Q/A with the Angular Team | December 2022 | #ngGames" srcset="https://substackcdn.com/image/fetch/$s_!ftpR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F531e3325-24c6-47db-8599-1640c1e932f6_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ftpR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F531e3325-24c6-47db-8599-1640c1e932f6_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ftpR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F531e3325-24c6-47db-8599-1640c1e932f6_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ftpR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F531e3325-24c6-47db-8599-1640c1e932f6_280x280.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=YvuUsuLckPA">Playing Games and Q/A with the Angular Team | December 2022 | #ngGames</a></strong></p><p>Angular Community your favorite game stream hosts Mark and Jeremy are back for an end-of-year stream featuring the &#8220;People&#8217;s Champ&#8221; Jessica Janiuk!</p><p>We&#8217;ll take a few moments to reflect on the stream for 2022, think about how we can grow the stream in 2023 and most of all, play some games!</p><p><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=YvuUsuLckPA">www.youtube.com</a></p><h3>#ngTutorials</h3><p><strong><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=QbDkDLnXAZE">Angular Builders &#8211; Creating Custom Builder from Scratch (Advanced, 2022) | by Decoded Frontend (Dmytro Mezhenskyi) &#127482;&#127462;</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LZwL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e1f0f5-770d-44c2-b684-bac08e74e600_280x280.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LZwL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e1f0f5-770d-44c2-b684-bac08e74e600_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LZwL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e1f0f5-770d-44c2-b684-bac08e74e600_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LZwL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e1f0f5-770d-44c2-b684-bac08e74e600_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LZwL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e1f0f5-770d-44c2-b684-bac08e74e600_280x280.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LZwL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e1f0f5-770d-44c2-b684-bac08e74e600_280x280.jpeg" width="280" height="280" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/b9e1f0f5-770d-44c2-b684-bac08e74e600_280x280.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:280,&quot;width&quot;:280,&quot;resizeWidth&quot;:280,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Angular Builders &#8211; Creating Custom Builder from Scratch (Advanced, 2022) | by Decoded Frontend (Dmytro Mezhenskyi) &#127482;&#127462; &quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Angular Builders &#8211; Creating Custom Builder from Scratch (Advanced, 2022) | by Decoded Frontend (Dmytro Mezhenskyi) &#127482;&#127462; " title="Angular Builders &#8211; Creating Custom Builder from Scratch (Advanced, 2022) | by Decoded Frontend (Dmytro Mezhenskyi) &#127482;&#127462; " srcset="https://substackcdn.com/image/fetch/$s_!LZwL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e1f0f5-770d-44c2-b684-bac08e74e600_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LZwL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e1f0f5-770d-44c2-b684-bac08e74e600_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LZwL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e1f0f5-770d-44c2-b684-bac08e74e600_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LZwL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9e1f0f5-770d-44c2-b684-bac08e74e600_280x280.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Angular builders are nodejs scripts executed by Angular CLI and perform different tasks like application build, serving the app, or running a different kinds of tests. You can create your own builders that can perform some particular tasks for your Angular application and in this tutorial, you will learn how to do that. At the end of this video, we will build a custom builder that patches the application build information in a dedicated JSON file, the JSON file name can be configured by providing custom options for the builder, and additionally, you will learn how to schedule another target from your custom builder.</p><p><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=QbDkDLnXAZE">www.youtube.com</a></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AsgM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F50a96da0-3e1a-4dcb-b685-f6da44e7dec5_280x280.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AsgM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F50a96da0-3e1a-4dcb-b685-f6da44e7dec5_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AsgM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F50a96da0-3e1a-4dcb-b685-f6da44e7dec5_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AsgM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F50a96da0-3e1a-4dcb-b685-f6da44e7dec5_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AsgM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F50a96da0-3e1a-4dcb-b685-f6da44e7dec5_280x280.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AsgM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F50a96da0-3e1a-4dcb-b685-f6da44e7dec5_280x280.jpeg" width="280" height="280" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/50a96da0-3e1a-4dcb-b685-f6da44e7dec5_280x280.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Ready to delete all your constructors in Angular? | by Brandon Roberts&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Ready to delete all your constructors in Angular? | by Brandon Roberts" title="Ready to delete all your constructors in Angular? | by Brandon Roberts" srcset="https://substackcdn.com/image/fetch/$s_!AsgM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F50a96da0-3e1a-4dcb-b685-f6da44e7dec5_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AsgM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F50a96da0-3e1a-4dcb-b685-f6da44e7dec5_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AsgM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F50a96da0-3e1a-4dcb-b685-f6da44e7dec5_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AsgM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F50a96da0-3e1a-4dcb-b685-f6da44e7dec5_280x280.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=RAxTDKMoe9o">Ready to delete all your constructors in Angular? | by Brandon Roberts</a></strong></p><p><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=RAxTDKMoe9o">www.youtube.com</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U3_Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d763065-3a03-424d-8e07-afb6f3669b3c_280x280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U3_Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d763065-3a03-424d-8e07-afb6f3669b3c_280x280.png 424w, https://substackcdn.com/image/fetch/$s_!U3_Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d763065-3a03-424d-8e07-afb6f3669b3c_280x280.png 848w, https://substackcdn.com/image/fetch/$s_!U3_Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d763065-3a03-424d-8e07-afb6f3669b3c_280x280.png 1272w, https://substackcdn.com/image/fetch/$s_!U3_Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d763065-3a03-424d-8e07-afb6f3669b3c_280x280.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U3_Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d763065-3a03-424d-8e07-afb6f3669b3c_280x280.png" width="280" height="280" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5d763065-3a03-424d-8e07-afb6f3669b3c_280x280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Debug Angular Apps Easily Using Angular DevTools | by Nethmi Wijesinghe&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Debug Angular Apps Easily Using Angular DevTools | by Nethmi Wijesinghe" title="Debug Angular Apps Easily Using Angular DevTools | by Nethmi Wijesinghe" srcset="https://substackcdn.com/image/fetch/$s_!U3_Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d763065-3a03-424d-8e07-afb6f3669b3c_280x280.png 424w, https://substackcdn.com/image/fetch/$s_!U3_Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d763065-3a03-424d-8e07-afb6f3669b3c_280x280.png 848w, https://substackcdn.com/image/fetch/$s_!U3_Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d763065-3a03-424d-8e07-afb6f3669b3c_280x280.png 1272w, https://substackcdn.com/image/fetch/$s_!U3_Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5d763065-3a03-424d-8e07-afb6f3669b3c_280x280.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><a href="https://www.syncfusion.com/blogs/post/debug-angular-apps-easily-using-angular-devtools.aspx?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Debug Angular Apps Easily Using Angular DevTools | by Nethmi Wijesinghe</a></strong></p><p>This article will go through Angular DevTools in detail and provide step-by-step guidance on making the best of it.</p><p><a href="https://www.syncfusion.com/blogs/post/debug-angular-apps-easily-using-angular-devtools.aspx?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">www.syncfusion.com</a></p><h3><strong>#ngPodcasts</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6TGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F198c79f5-b9cf-4c6e-aabd-b8b9164409be_280x280.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6TGP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F198c79f5-b9cf-4c6e-aabd-b8b9164409be_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6TGP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F198c79f5-b9cf-4c6e-aabd-b8b9164409be_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6TGP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F198c79f5-b9cf-4c6e-aabd-b8b9164409be_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6TGP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F198c79f5-b9cf-4c6e-aabd-b8b9164409be_280x280.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6TGP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F198c79f5-b9cf-4c6e-aabd-b8b9164409be_280x280.jpeg" width="280" height="280" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/198c79f5-b9cf-4c6e-aabd-b8b9164409be_280x280.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;S4 E16 - Deep Dive into Angular Version 15 with Emma Twersky | by The Angular Plus Show&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="S4 E16 - Deep Dive into Angular Version 15 with Emma Twersky | by The Angular Plus Show" title="S4 E16 - Deep Dive into Angular Version 15 with Emma Twersky | by The Angular Plus Show" srcset="https://substackcdn.com/image/fetch/$s_!6TGP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F198c79f5-b9cf-4c6e-aabd-b8b9164409be_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6TGP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F198c79f5-b9cf-4c6e-aabd-b8b9164409be_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6TGP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F198c79f5-b9cf-4c6e-aabd-b8b9164409be_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6TGP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F198c79f5-b9cf-4c6e-aabd-b8b9164409be_280x280.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><a href="https://www.spreaker.com/user/ng-conf/ap-show-s4e16-emma-twersky-edit-1?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">S4 E16 - Deep Dive into Angular Version 15 with Emma Twersky | by The Angular Plus Show</a></strong></p><p>It&#8217;s always a pleasure to welcome Emma Twersky to the podcast. In this episode we talk about how the pandemic helped shape the public face of the Angular team, and then we dive into some of the exciting features of the V15 release.</p><p><a href="https://www.spreaker.com/user/ng-conf/ap-show-s4e16-emma-twersky-edit-1?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">www.spreaker.com</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zuFm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F207a7f32-7465-41d4-8ac0-6c1709b41acb_280x280.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zuFm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F207a7f32-7465-41d4-8ac0-6c1709b41acb_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zuFm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F207a7f32-7465-41d4-8ac0-6c1709b41acb_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zuFm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F207a7f32-7465-41d4-8ac0-6c1709b41acb_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zuFm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F207a7f32-7465-41d4-8ac0-6c1709b41acb_280x280.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zuFm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F207a7f32-7465-41d4-8ac0-6c1709b41acb_280x280.jpeg" width="280" height="280" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/207a7f32-7465-41d4-8ac0-6c1709b41acb_280x280.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Angular 15: The Good Parts - AiA 362 | by Adventures in Angular&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Angular 15: The Good Parts - AiA 362 | by Adventures in Angular" title="Angular 15: The Good Parts - AiA 362 | by Adventures in Angular" srcset="https://substackcdn.com/image/fetch/$s_!zuFm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F207a7f32-7465-41d4-8ac0-6c1709b41acb_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zuFm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F207a7f32-7465-41d4-8ac0-6c1709b41acb_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zuFm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F207a7f32-7465-41d4-8ac0-6c1709b41acb_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zuFm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F207a7f32-7465-41d4-8ac0-6c1709b41acb_280x280.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/angular-15-the-good-parts-aia-362?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Angular 15: The Good Parts - AiA 362 | by Adventures in Angular</a></strong></p><p>Chuck welcomes Lucas to the show as a regular host of Adventures in Angular. They begin by discussing Angular 15&#8217;s most recent updates and what benefit it might have for the current Angular community. Lucas also offers his perspective on the new tools and what makes him excited to use them.</p><p><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/angular-15-the-good-parts-aia-362?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">topenddevs.com</a></p><h3><strong>#ngCommunity</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M85W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4aff0508-4721-44bb-b877-ff2ead9368d9_280x280.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M85W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4aff0508-4721-44bb-b877-ff2ead9368d9_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!M85W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4aff0508-4721-44bb-b877-ff2ead9368d9_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!M85W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4aff0508-4721-44bb-b877-ff2ead9368d9_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!M85W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4aff0508-4721-44bb-b877-ff2ead9368d9_280x280.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M85W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4aff0508-4721-44bb-b877-ff2ead9368d9_280x280.jpeg" width="280" height="280" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4aff0508-4721-44bb-b877-ff2ead9368d9_280x280.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Learning Angular w/ Minko Gechev | by Ryan Carniato&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Learning Angular w/ Minko Gechev | by Ryan Carniato" title="Learning Angular w/ Minko Gechev | by Ryan Carniato" srcset="https://substackcdn.com/image/fetch/$s_!M85W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4aff0508-4721-44bb-b877-ff2ead9368d9_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!M85W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4aff0508-4721-44bb-b877-ff2ead9368d9_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!M85W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4aff0508-4721-44bb-b877-ff2ead9368d9_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!M85W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4aff0508-4721-44bb-b877-ff2ead9368d9_280x280.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=tfxxeknwsi8">Learning Angular w/ Minko Gechev | by Ryan Carniato</a></strong></p><p>I&#8217;ve never looked at Angular before but that is all about to change. Who better to learn from than Minko Gechev the current Angular team lead.</p><p><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=tfxxeknwsi8">www.youtube.com</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dhsF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F728ac14d-0a73-4bf4-a96b-ca544f2c0702_280x280.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dhsF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F728ac14d-0a73-4bf4-a96b-ca544f2c0702_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dhsF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F728ac14d-0a73-4bf4-a96b-ca544f2c0702_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dhsF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F728ac14d-0a73-4bf4-a96b-ca544f2c0702_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dhsF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F728ac14d-0a73-4bf4-a96b-ca544f2c0702_280x280.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dhsF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F728ac14d-0a73-4bf4-a96b-ca544f2c0702_280x280.jpeg" width="280" height="280" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/728ac14d-0a73-4bf4-a96b-ca544f2c0702_280x280.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Ben Lesh on Twitter: \&quot;&#128640;RxJS 7.8.0 is out!\&quot; / Twitter&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Ben Lesh on Twitter: &quot;&#128640;RxJS 7.8.0 is out!&quot; / Twitter" title="Ben Lesh on Twitter: &quot;&#128640;RxJS 7.8.0 is out!&quot; / Twitter" srcset="https://substackcdn.com/image/fetch/$s_!dhsF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F728ac14d-0a73-4bf4-a96b-ca544f2c0702_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dhsF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F728ac14d-0a73-4bf4-a96b-ca544f2c0702_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dhsF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F728ac14d-0a73-4bf4-a96b-ca544f2c0702_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dhsF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F728ac14d-0a73-4bf4-a96b-ca544f2c0702_280x280.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><a href="https://twitter.com/BenLesh/status/1603535091992502274?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Ben Lesh on Twitter: "&#128640;RxJS 7.8.0 is out!" / Twitter</a></strong></p><p>RxJS 7 work is now &#8220;complete&#8221; as we shift focus to version 8. (7.7 and 7.8 were both published back-to-back after I realized we had more features ready to land) Thank you so much to all that contributed to v7</p><p><a href="https://twitter.com/BenLesh/status/1603535091992502274?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">twitter.com</a></p><h3><strong>#ngQuote</strong></h3><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lM3i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7786bd-da3b-46f2-a818-5961d14792bb_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lM3i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7786bd-da3b-46f2-a818-5961d14792bb_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lM3i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7786bd-da3b-46f2-a818-5961d14792bb_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lM3i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7786bd-da3b-46f2-a818-5961d14792bb_280x280.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lM3i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7786bd-da3b-46f2-a818-5961d14792bb_280x280.jpeg" width="168" height="168" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/2d7786bd-da3b-46f2-a818-5961d14792bb_280x280.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:280,&quot;resizeWidth&quot;:168,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Code without tests is bad code. It doesn't matter how well written it is; it doesn't matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the behavior of our code quickly and verifiably. Without them, we really don't know if our code is getting better or worse.\&quot; - Michael C. Feathers&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Code without tests is bad code. It doesn't matter how well written it is; it doesn't matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the behavior of our code quickly and verifiably. Without them, we really don't know if our code is getting better or worse.&quot; - Michael C. Feathers" title="Code without tests is bad code. It doesn't matter how well written it is; it doesn't matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the behavior of our code quickly and verifiably. Without them, we really don't know if our code is getting better or worse.&quot; - Michael C. Feathers" srcset="https://substackcdn.com/image/fetch/$s_!lM3i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7786bd-da3b-46f2-a818-5961d14792bb_280x280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lM3i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7786bd-da3b-46f2-a818-5961d14792bb_280x280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lM3i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7786bd-da3b-46f2-a818-5961d14792bb_280x280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lM3i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7786bd-da3b-46f2-a818-5961d14792bb_280x280.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><div class="pullquote"><p><strong>Code without tests is bad code. It doesn't matter how well written it is; it doesn't matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the behavior of our code quickly and verifiably. Without them, we really don't know if our code is getting better or worse." - Michael C. Feathers</strong></p></div><p><a href="https://www.goodreads.com/quotes/718460-code-without-tests-is-bad-code-it-doesn-t-matter-how?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">www.goodreads.com</a></p>]]></content:encoded></item><item><title><![CDATA[Issue #59: #ngGames, Custom Builder from Scratch, Deep Dive into Angular Version 15 with Emma Twersky, Angular DevTools]]></title><description><![CDATA[Angular Community your favorite game stream hosts Mark and Jeremy are back for an end-of-year stream featuring the "People's Champ" Jessica Janiuk!]]></description><link>https://angularweekly.substack.com/p/issue-59-nggames-custom-builder-from-22-12-19</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-59-nggames-custom-builder-from-22-12-19</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Mon, 19 Dec 2022 08:16:29 GMT</pubDate><enclosure url="https://s3.amazonaws.com/revue/profiles/images/000/338/534/thumb/LogoMakr-2wrDvq_%281%29.png?1636196656" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://www.youtube.com/watch?v=YvuUsuLckPA">Angular Community your favorite game stream hosts Mark and Jeremy are back for an end-of-year stream featuring the "People's Champ" Jessica Janiuk!</a></p><p><a href="https://www.youtube.com/watch?v=YvuUsuLckPA">We'll take a few moments to reflect on the stream for 2022, think about how we can grow the stream in 2023 and most of all, play some games!</a></p><h1>#ngTutorials</h1><p><a href="https://www.youtube.com/watch?v=QbDkDLnXAZE">Angular builders are nodejs scripts executed by Angular CLI and perform different tasks like application build, serving the app, or running a different kinds of tests. You can create your own builders that can perform some particular tasks for your Angular application and in this tutorial, you will learn how to do that. At the end of this video, we will build a custom builder that patches the application build information in a dedicated JSON file, the JSON file name can be configured by providing custom options for the builder, and additionally, you will learn how to schedule another target from your custom builder.</a></p><p><a href="https://www.syncfusion.com/blogs/post/debug-angular-apps-easily-using-angular-devtools.aspx">This article will go through Angular DevTools in detail and provide step-by-step guidance on making the best of it.</a></p><h1>#ngPodcasts</h1><p><a href="https://www.spreaker.com/user/ng-conf/ap-show-s4e16-emma-twersky-edit-1">It's always a pleasure to welcome Emma Twersky to the podcast. In this episode we talk about how the pandemic helped shape the public face of the Angular team, and then we dive into some of the exciting features of the V15 release.</a></p><p><a href="https://topenddevs.com/podcasts/adventures-in-angular/episodes/angular-15-the-good-parts-aia-362">Chuck welcomes Lucas to the show as a regular host of Adventures in Angular. They begin by discussing Angular 15's most recent updates and what benefit it might have for the current Angular community. Lucas also offers his perspective on the new tools and what makes him excited to use them.</a></p><h1>#ngCommunity</h1><p><a href="https://www.youtube.com/watch?v=tfxxeknwsi8">I've never looked at Angular before but that is all about to change. Who better to learn from than Minko Gechev the current Angular team lead.</a></p><p><a href="https://twitter.com/BenLesh/status/1603535091992502274">RxJS 7 work is now "complete" as we shift focus to version 8. (7.7 and 7.8 were both published back-to-back after I realized we had more features ready to land) Thank you so much to all that contributed to v7</a></p><h1>#ngQuote</h1>]]></content:encoded></item><item><title><![CDATA[Issue #58: Angular Nov/Dec Virtual Meetup, Roadmap To Learning Angular series, Directive Type Checking, Modern NgRx, Declarative RxJS with Custom Operators ]]></title><description><![CDATA[Mountain View and San Francisco Angular Nov/Dec Virtual Meetup | by Angular &#8212; www.youtube.com]]></description><link>https://angularweekly.substack.com/p/issue-58-angular-nov-dec-virtual-meetup-roadmap-to-learning-angular-series-directive-type-checking-modern-ngrx-declarative-rxjs-with-custom-operators-1489857</link><guid isPermaLink="false">https://angularweekly.substack.com/p/issue-58-angular-nov-dec-virtual-meetup-roadmap-to-learning-angular-series-directive-type-checking-modern-ngrx-declarative-rxjs-with-custom-operators-1489857</guid><dc:creator><![CDATA[Yevhenii Herasymchuk]]></dc:creator><pubDate>Mon, 12 Dec 2022 11:17:48 GMT</pubDate><enclosure url="https://s3.amazonaws.com/revue/profiles/images/000/338/534/thumb/LogoMakr-2wrDvq_%281%29.png?1636196656" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=OE3hRKFj60U">Mountain View and San Francisco Angular Nov/Dec Virtual Meetup | by Angular</a> &#8212; <a href="https://www.youtube.com/watch?v=OE3hRKFj60U">www.youtube.com</a></strong></p><h2>#ngTutorials</h2><p><strong><a href="https://medium.com/@thomas.laforge/directive-type-checking-3d3c5f1137b3?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Directive Type Checking | by Thomas Laforge</a> &#8212; <a href="https://medium.com/@thomas.laforge/directive-type-checking-3d3c5f1137b3">medium.com</a></strong></p><p>The fourth challenge will teach us how to use the&nbsp;<code>ngTemplateOutlet&nbsp;</code>structural directive of Angular with strong typing.</p><p><strong><a href="https://ng-journal.com/blog/2022-12-12-declarative-rxjs/?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Declarative RxJS with Custom Operators | by Stefan Haas</a> &#8212; <a href="https://ng-journal.com/blog/2022-12-12-declarative-rxjs/">ng-journal.com</a></strong></p><p>Usually, RxJS streams tend to get a bit messy and unreadable when a lot of pipe operators are needed. One reason for this unreadability is the imperative nature of these RxJS streams. Therefore, making them declarative by using custom operators makes your streams a lot more clean and readable.</p><p><strong><a href="https://ng-journal.com/blog/2022-12-08-ngrx-component-store-meets-facade-pattern/?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">NgRx Component Store meets Facade Pattern | by Stefan Haas</a> &#8212; <a href="https://ng-journal.com/blog/2022-12-08-ngrx-component-store-meets-facade-pattern/">ng-journal.com</a></strong> On the one hand, the Component Store is a really fancy library for simple state management. But on the other hand, tightly coupling state management into an application is always a bad idea. The reason for that being, that the need for state management is changing during the lifetime of an application. In the beginning it is often unnecessary to invest too much time into a fully fledged state management library when a service-based state management would be enough. But suddenly, after a few months working with stateful services, the need for a fully fledged state management library arises. But what now? Just throw everything out of the window?</p><p><strong><a href="https://blog.ag-grid.com/reducing-angular-library-contributions-to-the-main-bundle/?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Reducing Angular Library Contributions to the Main Bundle | by Nicolas Gehlert</a> &#8212; <a href="https://blog.ag-grid.com/reducing-angular-library-contributions-to-the-main-bundle/">blog.ag-grid.com</a></strong></p><p>....learn the best way to include AG Grid in your own shared Angular library that will not result in AG Grid being included in the main bundle, as long as it is only used in lazy loaded routes.</p><p><strong><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=Pi-5_eid7VA">ChatGPT just built my entire app in minutes... | by Joshua Morony</a> &#8212; <a href="https://www.youtube.com/watch?v=Pi-5_eid7VA">www.youtube.com</a></strong></p><p>I asked ChatGPT how to create a todo app in Angular and it provided me with an unexpectedly accurate answer. With very little input from myself, it was able to provide the code for the entire application.</p><p><strong><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=_8JhIiu0bnw">Modern NgRx | by Brandon Roberts</a> &#8212; <a href="https://www.youtube.com/watch?v=_8JhIiu0bnw">www.youtube.com</a></strong></p><p><strong><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=ZG5VE-hvzX8">I changed my mind. Angular needs a reactive primitive | by Mike F. Pearson</a> &#8212; <a href="https://www.youtube.com/watch?v=ZG5VE-hvzX8">www.youtube.com</a></strong></p><p>Angular developers have waited 7 years for better integration with RxJS, but this doesn't seem to be happening. This made me angry at first, but after a lot of thinking and talking with other developers, I now believe that a reactive primitive could provide an overall better developer experience than just better RxJS support, even for the most diehard RxJS fans.</p><h2>#ngPodcasts</h2><p><strong><a href="https://www.spreaker.com/user/ng-conf/ap-show-s4e15-shaundai-person-edit-1?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">S4 E 15 - Typescript: Not Just For Angular Lovers with Shaundai Person</a> &#8212; <a href="https://www.spreaker.com/user/ng-conf/ap-show-s4e15-shaundai-person-edit-1">www.spreaker.com</a></strong></p><p>As an Angular Developer, you might be writing Typescript but are you REALLY writing typescript? Join us as we welcome Shaundai Person to the podcast where we will talk about what we love about Typescript, what is frustrating about Typescript, and why Typescript is an important tool for teams and code bases across all Javascript frameworks.</p><h2>#ngCommunity</h2><p><strong><a href="https://www.youtube.com/watch?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=KBFQZw5ynFs">What's new in Nx 15.3? | by Juri Strumpflohner</a> &#8212; <a href="https://www.youtube.com/watch?v=KBFQZw5ynFs">www.youtube.com</a></strong></p><p>Here's all you need to know about what's new in Nx 15.3, in under 10 minutes!</p><p><strong><a href="https://www.youtube.com/playlist?list=PLOETEcp3DkCoFF8YzwqoA6bFVR1Q8ni5e&amp;utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Roadmap To Learning Angular | by ng-conf</a> &#8212; <a href="https://www.youtube.com/playlist?list=PLOETEcp3DkCoFF8YzwqoA6bFVR1Q8ni5e">www.youtube.com</a></strong></p><p>Roadmap to Learning <a href="https://twitter.com/hashtag/Angular?src=hashtag_click">#Angular</a> series, hosted by <a href="https://twitter.com/JediBravery">@JediBravery</a></p><h2>#ngQuote</h2><p><strong><a href="https://www.goodreads.com/quotes/604331-programming-is-the-art-of-doing-one-thing-at-a?utm_campaign=Angular%20Weekly%20&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">"Programming is the art of doing one thing at a time." - Michael C. Feathers</a> &#8212; <a href="https://www.goodreads.com/quotes/604331-programming-is-the-art-of-doing-one-thing-at-a">www.goodreads.com</a></strong></p>]]></content:encoded></item></channel></rss>