<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sandeep Balachandran</title>
    <description>The latest articles on DEV Community by Sandeep Balachandran (@sandeepbalachandran).</description>
    <link>https://dev.to/sandeepbalachandran</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F111337%2F3d47c847-6750-4f10-a147-ba89e8e176f0.jpeg</url>
      <title>DEV Community: Sandeep Balachandran</title>
      <link>https://dev.to/sandeepbalachandran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sandeepbalachandran"/>
    <language>en</language>
    <item>
      <title>⭐Angular 18 Features ⭐</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Thu, 23 May 2024 06:24:30 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/angular-18-features-5ajm</link>
      <guid>https://dev.to/sandeepbalachandran/angular-18-features-5ajm</guid>
      <description>&lt;p&gt;Hey there,&lt;/p&gt;

&lt;p&gt;Version 18.0.0 is here and it has some great updates for Angular developers everywhere. 🎉🎉&lt;/p&gt;

&lt;h1&gt;
  
  
  TL;DR 🙌
&lt;/h1&gt;

&lt;p&gt;✅ Experimental support for zoneless change detection&lt;/p&gt;

&lt;p&gt;✅ Angular.dev is now the new home for Angular developers&lt;/p&gt;

&lt;p&gt;✅ Material 3, deferrable views, built-in control flow are now stable&lt;/p&gt;

&lt;p&gt;✅ Server-side rendering improvements such as i18n hydration support&lt;/p&gt;

&lt;p&gt;✅ More Additional features&lt;/p&gt;

&lt;h1&gt; How to update to version 18&lt;/h1&gt;

&lt;p&gt;Visit &lt;a href="https://update.angular.io" rel="noopener noreferrer"&gt;update.angular.io&lt;/a&gt; for detailed information and guidance. To have the best update experience,&lt;/p&gt;

&lt;p&gt;Update to 18&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng update @angular/cli @angular/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to update your global angular,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;center&gt;&lt;h2&gt;&lt;u&gt;What’s in this release?&lt;/u&gt;&lt;/h2&gt;&lt;/center&gt;
  

&lt;h2&gt;
  
  
  ✅ Evolving change detection
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You can try the experimental zoneless support in Angular starting today! Add

&lt;code&gt;provideExperimentalZonelessChangeDetection&lt;/code&gt;

to your application bootstrap
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bootstrapApplication(App, {
  providers: [
    provideExperimentalZonelessChangeDetection()
  ]
}); 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;After adding the provider, remove zone.js from your polyfills in angular.json&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Moving forward, zoneless opens many doors for developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improving composability for micro-frontends and interoperability with other frameworks&lt;/li&gt;
&lt;li&gt;Faster initial render and runtime&lt;/li&gt;
&lt;li&gt;Smaller bundle size and faster page loads&lt;/li&gt;
&lt;li&gt;More readable stack traces&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The best way to use zoneless in your components is with signals:&lt;br&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
@Component({
  ...
  template: `
    &amp;lt;h1&amp;gt;Hello from {{ name() }}!&amp;lt;/h1&amp;gt;
    &amp;lt;button (click)="handleClick()"&amp;gt;Go Zoneless&amp;lt;/button&amp;gt;
  `,
})
export class App {
  protected name = signal('Angular');

  handleClick() {
    this.name.set('Zoneless Angular');
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;In the example above, clicking the button invokes the handleClick method, which updates the signal value and updates the UI. &lt;/li&gt;
&lt;li&gt;This works similarly to an application using zone.js, with few differences. &lt;/li&gt;
&lt;li&gt;With zone.js, Angular ran change detection any time application state might have changed. &lt;/li&gt;
&lt;li&gt;Without zones, Angular limits this checking to fewer triggers, such as signal updates. &lt;/li&gt;
&lt;li&gt;This change also includes a new scheduler with coalescing to avoid checking for changes multiple times consecutively.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ New home for Angular developers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Today, angular.dev has became the official documentation website for Angular!&lt;/li&gt;
&lt;li&gt;On top of the new, modern look and feel you can find 

&lt;ul&gt;
&lt;li&gt;an interactive hands-on tutorial based on WebContainers, &lt;/li&gt;
&lt;li&gt;interactive playground with examples, &lt;/li&gt;
&lt;li&gt;improved search powered by Algolia, &lt;/li&gt;
&lt;li&gt;refreshed guides, &lt;/li&gt;
&lt;li&gt;simplified navigation&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;All requests to &lt;a href="https://angular.io/" rel="noopener noreferrer"&gt;angular.io&lt;/a&gt; now automatically redirect to &lt;a href="https://angular.dev/" rel="noopener noreferrer"&gt;angular.dev&lt;/a&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Stablilty Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Material 3 is now stable!
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; You can check it out right here 👉 &lt;a href="https://material.angular.io/" rel="noopener noreferrer"&gt;material.angular.io&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Signal APIs in developer preview
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Find how to use the APIs in  signals guide &lt;a href="https://angular.dev/guide/signals" rel="noopener noreferrer"&gt;Guide&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Deferrable views are now stable
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Built-in control flow is now stable
&lt;/h3&gt;

&lt;h2&gt;
  
  
  ✅ Improvements in server-side rendering
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;one of the  main blockers to get even more people to take advantage of hydration was lack of i18n support&lt;/li&gt;
&lt;li&gt;i18n blocks is available in developer preview mode in Angular v18!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Improved debugging experience
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Angular’s hydration process can be visulize in Angular DevTools. &lt;/li&gt;
&lt;li&gt;Next to each component you can find an icon representing the component’s hydration status. &lt;/li&gt;
&lt;li&gt;To preview which components Angular hydrated on the page you can also enable an overlay mode. &lt;/li&gt;
&lt;li&gt;If your app has any hydration errors, Angular DevTools will visualize them in the component explorer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ More Additional features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  👉 Specifying a fallback content for ng-content
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In v18 specifying default content for ng-content is available
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({
  selector: 'app-profile',
  template: `
    &amp;lt;ng-content select=".greeting"&amp;gt;Hello &amp;lt;/ng-content&amp;gt;

    &amp;lt;ng-content&amp;gt;Unknown user&amp;lt;/ng-content&amp;gt;
  `,
})
export class Profile {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Now we can use the component:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;app-profile&amp;gt;
  &amp;lt;span class="greeting"&amp;gt;Good morning &amp;lt;/span&amp;gt;
&amp;lt;/app-profile&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which will result in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;span class="greeting"&amp;gt;Good morning &amp;lt;/span&amp;gt;
Unknown user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  👉 Unified control state change events
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;FormControl, FormGroup and FormArray classes from Angular forms now expose a property called events, which allows you to subscribe to a stream of events for this form control.&lt;/li&gt;
&lt;li&gt; Using it you can track changes in value, touch state, pristine status, and the control status.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now you can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const nameControl = new FormControl&amp;lt;string|null&amp;gt;('name', Validators.required);
nameControl.events.subscribe(event =&amp;gt; {
  // process the individual events
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  👉 Automating the migration to the application builder
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In Angular v17 we announced “application builder” as stable and enabled it by default for new projects. &lt;/li&gt;
&lt;li&gt;Under the hood it uses Vite with esbuild to replace the previous webpack experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👉 Route redirects as functions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;To enable higher flexibility when dealing with redirects, in Angular v18 redirectTo now accepts a function which returns a string. &lt;/li&gt;
&lt;li&gt;For example, if you’d like to redirect to a route that depends on some runtime state you can implement a more complicated logic in a function:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const routes: Routes = [
  { path: "first-component", component: FirstComponent },
  {
    path: "old-user-page",
    redirectTo: ({ queryParams }) =&amp;gt; {
      const errorHandler = inject(ErrorHandler);
      const userIdParam = queryParams['userId'];
      if (userIdParam !== undefined) {
        return `/user/${userIdParam}`;
      } else {
        errorHandler.handleError(new Error('Attempted navigation to user page without user ID.'));
        return `/not-found`;
      }
    },
  },
  { path: "user/:userId", component: OtherComponent },
];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  👉 TypeScript 5.4
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; Angular updated the dependency on TypeScript letting you take advantage of all the latest TypeScript &lt;a href="https://devblogs.microsoft.com/typescript/announcing-typescript-5-4/" rel="noopener noreferrer"&gt;5.4 features!&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more let us hear it from the creators&lt;/p&gt;

&lt;p&gt;Credits : &lt;a href="https://blog.angular.dev/angular-v18-is-now-available-e79d5ac0affe" rel="noopener noreferrer"&gt;Official Announcement 😄&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Changelog : &lt;a href="https://github.com/angular/angular/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt; Repository &lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>angular</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>⭐Angular 17 Features ⭐</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Thu, 23 May 2024 03:20:47 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/angular-17-features-4mmo</link>
      <guid>https://dev.to/sandeepbalachandran/angular-17-features-4mmo</guid>
      <description>&lt;p&gt;Hey there,&lt;/p&gt;

&lt;p&gt;Version 17.0.0 is here and it has some great updates for Angular developers everywhere. 🎉🎉&lt;/p&gt;

&lt;h1&gt;
  
  
  TL;DR 🙌
&lt;/h1&gt;

&lt;p&gt;✅ Future-looking identity&lt;/p&gt;

&lt;p&gt;✅ Built-in control flow&lt;/p&gt;

&lt;p&gt;✅ Deferrable views&lt;/p&gt;

&lt;p&gt;✅ Revamped hybrid rendering experience&lt;/p&gt;

&lt;p&gt;✅ New @angular/ssr package&lt;/p&gt;

&lt;p&gt;✅ New lifecycle hooks&lt;/p&gt;

&lt;p&gt;✅ Vite and esbuild the default for new projects&lt;/p&gt;

&lt;p&gt;✅ Dependency injection debugging in DevTools&lt;/p&gt;

&lt;p&gt;✅ Improving Developer Experience&lt;/p&gt;

&lt;h1&gt; How to update to version 17&lt;/h1&gt;

&lt;p&gt;Visit &lt;a href="https://update.angular.io" rel="noopener noreferrer"&gt;update.angular.io&lt;/a&gt; for detailed information and guidance. To have the best update experience,&lt;/p&gt;

&lt;p&gt;Update to 17&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng update @angular/cli @angular/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to update your global angular,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;center&gt;&lt;h2&gt;&lt;u&gt;What’s in this release?&lt;/u&gt;&lt;/h2&gt;&lt;/center&gt;
  

&lt;h2&gt;
  
  
  ✅ Future-looking identity
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmf9i8us0lu4fuftx6kkn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmf9i8us0lu4fuftx6kkn.gif" alt=" " width="600" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With Angular 17, developers can now access an updated documentation platform hosted on &lt;a href="https://angular.dev/" rel="noopener noreferrer"&gt;angular.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The new website  has new structure, new guides, improved content, and built a platform for an interactive learning journey that will let you learn Angular and the Angular CLI at your own pace, directly in the browser.&lt;/li&gt;
&lt;li&gt;Currently it is in  beta  preview and planning to make it the default website for Angular in v18.&lt;/li&gt;
&lt;li&gt;Read more about it here 👉 &lt;a href="https://blog.angular.io/announcing-angular-dev-1e1205fa3039" rel="noopener noreferrer"&gt;Blog post&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Built-in control flow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The built-in control flow is available in v17 under developer preview today!&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Angular 17 introduces a new block template syntax, enhancing the developer experience by offering powerful features &lt;/li&gt;
&lt;li&gt;A new block template syntax that gives you powerful features with simple, declarative APIs are released&lt;/li&gt;
&lt;li&gt;Under the hood, the Angular compiler transforms the syntax to efficient JavaScript instructions that could perform control flow, lazy loading, and more.&lt;/li&gt;
&lt;li&gt;The built-in control flow enables:

&lt;ul&gt;
&lt;li&gt;More ergonomic syntax that is closer to JavaScript, thus more intuitive requiring fewer documentation lookups&lt;/li&gt;
&lt;li&gt;Better type checking thanks to more optimal type narrowing&lt;/li&gt;
&lt;li&gt;It’s a concept that primarily exists at build-time, which reduces the runtime footprint (making it “disappearing”) which could drop your bundle size by up to 30 kilobytes and further improve your Core Web Vital scores&lt;/li&gt;
&lt;li&gt;It is automatically available in your templates without additional imports&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Conditional statements
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;ngIf&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;loggedIn; else anonymousUser&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;logged&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ng&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;anonymousUser&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;not&lt;/span&gt; &lt;span class="nx"&gt;logged&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ng-template&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the built-in if statement, this condition will look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;@if (loggedIn) {
  The user is logged in
} @else {
  The user is not logged in
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Being able to provide the content for &lt;a class="mentioned-user" href="https://dev.to/else"&gt;@else&lt;/a&gt; directly is a major simplification compared to the else clause of the legacy *ngIf alternative. &lt;/li&gt;
&lt;li&gt;The current control flow also makes it trivial to have &lt;a class="mentioned-user" href="https://dev.to/else"&gt;@else&lt;/a&gt; if, which historically has been impossible.&lt;/li&gt;
&lt;li&gt;The improved ergonomics is even more visible with *ngSwitch:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;[ngSwitch]=&lt;/span&gt;&lt;span class="s"&gt;"accessLevel"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;admin-dashboard&lt;/span&gt; &lt;span class="na"&gt;*ngSwitchCase=&lt;/span&gt;&lt;span class="s"&gt;"admin"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;moderator-dashboard&lt;/span&gt; &lt;span class="na"&gt;*ngSwitchCase=&lt;/span&gt;&lt;span class="s"&gt;"moderator"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;user-dashboard&lt;/span&gt; &lt;span class="na"&gt;*ngSwitchDefault&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which with the built-in control flow turns into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;@switch (accessLevel) {
  @case ('admin') { &lt;span class="nt"&gt;&amp;lt;admin-dashboard/&amp;gt;&lt;/span&gt; }
  @case ('moderator') { &lt;span class="nt"&gt;&amp;lt;moderator-dashboard/&amp;gt;&lt;/span&gt; }
  @default { &lt;span class="nt"&gt;&amp;lt;user-dashboard/&amp;gt;&lt;/span&gt; }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The new control flow enables significantly better type-narrowing in the individual branches in &lt;a class="mentioned-user" href="https://dev.to/switch"&gt;@switch&lt;/a&gt; which is not possible in *ngSwitch.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Built-in for loop
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;@for (user of users; track user.id) {
  {{ user.name }}
} @empty {
  Empty list of users
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;We often see performance problems in apps due to the lack of trackBy function in *ngFor. &lt;/li&gt;
&lt;li&gt;A few differences in &lt;a class="mentioned-user" href="https://dev.to/for"&gt;@for&lt;/a&gt; are that track is mandatory to ensure fast diffing performance. &lt;/li&gt;
&lt;li&gt;In addition, it’s way easier to use since it’s just an expression rather than a method in the component’s class. &lt;/li&gt;
&lt;li&gt;The built-in &lt;a class="mentioned-user" href="https://dev.to/for"&gt;@for&lt;/a&gt; loop also has a shortcut for collections with zero items via an optional &lt;a class="mentioned-user" href="https://dev.to/empty"&gt;@empty&lt;/a&gt; block.&lt;/li&gt;
&lt;li&gt;The &lt;a class="mentioned-user" href="https://dev.to/for"&gt;@for&lt;/a&gt; statement uses a new diffing algorithm and has more optimal implementation compared to *ngFor, which makes it up to 90% faster runtime for community framework benchmarks!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Deferrable views
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Angular 17 introduces a concept known as deferrable views or &lt;a class="mentioned-user" href="https://dev.to/defer"&gt;@defer&lt;/a&gt; blocks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deferrable views are available in developer preview in v17&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Deferrable views bring performance and developer experience to the next level because they enable declarative and powerful deferred loading with unprecedented ergonomics.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;@defer (on viewport) {
  &lt;span class="nt"&gt;&amp;lt;comment-list/&amp;gt;&lt;/span&gt;
} @loading {
  Loading…
} @error {
  Loading failed :(
} @placeholder {
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"comments-placeholder.png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;There’s a ton of complexity under the hood that Angular manages for you.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deferrable views offer a few more triggers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;on idle — lazily load the block when the browser is not doing any heavy lifting&lt;/li&gt;
&lt;li&gt;on immediate — start lazily loading automatically, without blocking the browser&lt;/li&gt;
&lt;li&gt;on timer(&lt;time&gt;) — delay loading with a timer&lt;/time&gt;
&lt;/li&gt;
&lt;li&gt;on viewport and on viewport() — viewport also allows to specify a reference for an anchor element. When the anchor element is visible, Angular will lazily load the component and render it&lt;/li&gt;
&lt;li&gt;on interaction and on interaction() — enables you to initiate lazy loading when the user interacts with a particular element &lt;/li&gt;
&lt;li&gt;on hover and on hover() — triggers lazy loading when the user hovers an element&lt;/li&gt;
&lt;li&gt;when  — enables you to specify your own condition via a boolean expression&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Deferrable views also provide the ability to prefetch the dependencies ahead of rendering them.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Adding prefetching is as simple as adding a prefetch statement to the defer block and supports all the same triggers.&lt;br&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;@defer (on viewport; prefetch on idle) {
  &lt;span class="nt"&gt;&amp;lt;comment-list&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Revamped hybrid rendering experience
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Angular 17 brings a revitalized hybrid rendering experience, offering robust server-side rendering (SSR) and static site generation (SSG) support&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ New @angular/ssr package
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Angular Universal repository is moved to the Angular CLI repository and made server-side rendering an even more integral part&lt;/li&gt;
&lt;li&gt;To add hybrid rendering support to your existing application run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng add @angular/ssr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ New lifecycle hooks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;2 new life cycle hooks introduced in this release

&lt;ul&gt;
&lt;li&gt;afterRender — register a callback to be invoked each time the application finishes rendering&lt;/li&gt;
&lt;li&gt;afterNextRender — register a callback to be invoked the next time the application finishes rendering&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Only the browser will invoke these hooks, which enables you to plug custom DOM logic safely directly inside your components.
&lt;h2&gt;
  
  
  ✅ Vite and esbuild the default for new projects&lt;/h2&gt;
&lt;/li&gt;



&lt;li&gt;esbuild plus Vite powered build experience is enabled by default for all new applications&lt;/li&gt;

&lt;li&gt;Benefits

&lt;ul&gt;
&lt;li&gt;A 67% improvement in build time.&lt;/li&gt;
&lt;li&gt;An 87% speed improvement with SSR and SSG.&lt;/li&gt;
&lt;li&gt;A lightweight and efficient build process.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Dependency injection debugging in DevTools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;brand new debugging APIs are introduced that allow us to plug into the framework’s runtime and inspect the injector tree.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Based on these APIs we built an inspection user interface that allows you to preview the:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dependencies of your components in the component inspector&lt;/li&gt;
&lt;li&gt;Injector tree and dependency resolution path&lt;/li&gt;
&lt;li&gt;Providers declared within the individual injectors&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Improving Developer Experience
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Input value transforms
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A common pattern is having a component which receives a boolean input. &lt;/li&gt;
&lt;li&gt;This, however, sets constraints on how you can pass a value to such a component. &lt;/li&gt;
&lt;li&gt;For example if we have the following definition of an Expander component:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;standalone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-expander&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`…`&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Expander&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nx"&gt;expanded&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;and we try to use it as
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;my-expander&lt;/span&gt; &lt;span class="na"&gt;expanded&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;You’ll get an error that “string is not assignable to boolean”. &lt;/li&gt;
&lt;li&gt;Input value transforms allow you to fix this by configuring the input decorator:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;standalone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-expander&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`…`&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Expander&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;booleanAttribute&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="nx"&gt;expanded&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Style and styleUrls as strings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Angular components support multiple stylesheets per component. &lt;/li&gt;
&lt;li&gt;However, the vast majority of cases when I want to style my components I create an array with a single element pointing to the inline styles or referencing an external stylesheet&lt;/li&gt;
&lt;li&gt;A new feature enables you to switch from
*
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({
  styles: [`
    ...
  `]
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({
  styleUrls: ['styles.css']
})

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to the simpler and more logical&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({
  styles:``
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({
  styleUrl: 'styles.css'
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more let us hear it from the creators&lt;/p&gt;

&lt;p&gt;Credits : &lt;a href="https://blog.angular.io/introducing-angular-v17-4d7033312e4b" rel="noopener noreferrer"&gt;Official Announcement 😄&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Changelog : &lt;a href="https://github.com/angular/angular/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt; Repository &lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>angular</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>⭐Angular 16 Features ⭐</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Thu, 23 May 2024 03:04:14 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/angular-16-features-4jln</link>
      <guid>https://dev.to/sandeepbalachandran/angular-16-features-4jln</guid>
      <description>&lt;p&gt;Hey there,&lt;/p&gt;

&lt;p&gt;I know I am a little late at this point. Also It has been a long since I have posted something here. So here it goes.&lt;/p&gt;

&lt;p&gt;Version 16.0.0 is here and it has some great updates for Angular developers everywhere. 🎉🎉&lt;/p&gt;

&lt;h1&gt;
  
  
  TL;DR 🙌
&lt;/h1&gt;

&lt;p&gt;✅ New reactivity model &lt;/p&gt;

&lt;p&gt;✅ Angular Signals&lt;/p&gt;

&lt;p&gt;✅ Server-side rendering and hydration&lt;/p&gt;

&lt;p&gt;✅ Improved tooling for standalone components, directives, and pipes&lt;/p&gt;

&lt;p&gt;✅ Advancing developer tooling&lt;/p&gt;

&lt;p&gt;✅ Improving Developer Experience&lt;/p&gt;

&lt;h1&gt; How to update to version 16&lt;/h1&gt;

&lt;p&gt;Visit &lt;a href="https://update.angular.io" rel="noopener noreferrer"&gt;update.angular.io&lt;/a&gt; for detailed information and guidance. To have the best update experience,&lt;/p&gt;

&lt;p&gt;Update to 16&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng update @angular/cli @angular/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to update your global angular,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;center&gt;&lt;h2&gt;&lt;u&gt;What’s in this release?&lt;/u&gt;&lt;/h2&gt;&lt;/center&gt;

&lt;h2&gt;
  
  
  ✅ New reactivity model
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;As part of the v16 release Angular team share a developer preview of a brand new reactivity model for Angular which brings significant improvements to performance and developer experience&lt;/li&gt;
&lt;li&gt;It’s entirely backward compatible and interoperable with the current system, and enables:

&lt;ul&gt;
&lt;li&gt;Better run time performance by reducing the number of computations during change detection. &lt;/li&gt;
&lt;li&gt;Brings a simpler mental model for reactivity&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  👉 Signals
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The Angular signals library allows you to define reactive values and express dependencies between them.&lt;/li&gt;
&lt;li&gt;A signal is a value with explicit change semantics. &lt;/li&gt;
&lt;li&gt;In Angular a signal is represented by a zero argument getter function returning the current signal value:&lt;/li&gt;
&lt;li&gt;Signals are fundamentally read-only: we can ask for the current value and observe change notification.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;standalone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
    {{ fullName() }} &amp;lt;button (click)="setName('John')"&amp;gt;Click&amp;lt;/button&amp;gt;
  `&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jane&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Doe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;fullName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;effect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Name changed:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fullName&lt;/span&gt;&lt;span class="p"&gt;()));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The snippet above creates a computed value fullName, which depends on the signals firstName and lastName. &lt;/li&gt;
&lt;li&gt;We also declare an effect, which callback will execute every time we change the value of any of the signals it reads — in this case fullName, which means it transitively also depends on firstName and lastName.&lt;/li&gt;
&lt;li&gt;When we set the value of firstName to ”John”, the browser will log into the console:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Name changed: John Doe"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Server-side rendering and hydration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In the new full app &lt;strong&gt;non-destructive hydration&lt;/strong&gt;, Angular no longer re-renders the application from scratch. &lt;/li&gt;
&lt;li&gt;Instead, the framework looks up existing DOM nodes while building internal data structures and attaches event listeners to those nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Features&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;No content flickering on a page for end users&lt;/li&gt;
&lt;li&gt;Better Web Core Vitals in certain scenarios&lt;/li&gt;
&lt;li&gt;Future-proof architecture that enables fine-grained code loading with primitives &lt;/li&gt;
&lt;li&gt;Easy integration with existing apps&lt;/li&gt;
&lt;li&gt;Incremental adoption of hydration with the

&lt;code&gt;ngSkipHydration&lt;/code&gt;

attribute in templates for components performing manual DOM manipulation&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;Non-destructive hydration is still at the developer preview stage. &lt;/li&gt;
&lt;li&gt;But you can enable it by adding provideClientHydration() as a provider when bootstrapping the application.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nx"&gt;bootstrapApplication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="nx"&gt;provideClientHydration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/platform-browser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="nf"&gt;bootstrapApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;RootCmp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;provideClientHydration&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;You can find more details on how it works in the documentation right here 👉 &lt;a href="https://angular.io/guide/hydration" rel="noopener noreferrer"&gt;Hydration&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Improved tooling for standalone components, directives, and pipes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Angular 14 started supporting standalone components, which are independent of modules. &lt;/li&gt;
&lt;li&gt;Angular 16 takes this to the next level by supporting standalone project creation.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng new --standalone
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;You’ll get a simpler project output without any NgModules. &lt;/li&gt;
&lt;li&gt;Additionally, all the generators in the project will produce standalone directives, components, and pipes!&lt;/li&gt;
&lt;li&gt;Zone.js can be configured  with the new bootstrapApplication API.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nf"&gt;bootstrapApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;provideZoneChangeDetection&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;eventCoalescing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;})]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Advancing developer tooling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  👉 Developer preview of the esbuild-based build system
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In

&lt;code&gt;ng serve&lt;/code&gt;

angular now  using Vite for the development server, and esbuild powers both  development and production builds&lt;/li&gt;
&lt;li&gt; Angular CLI relies on Vite exclusively as a development server. &lt;/li&gt;
&lt;li&gt; To support selector matching, the Angular compiler needs to maintain a dependency graph between  components which requires a different compilation model than Vite.&lt;/li&gt;
&lt;li&gt;You can give Vite + esbuild a try by updating your angular.json:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"architect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="err"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;esbuild&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;suffix&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;*/&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"builder"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@angular-devkit/build-angular:browser-esbuild"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  👉 Better unit testing with Jest and Web Test Runner
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; Jest is one of the most loved testing frameworks and test runners.&lt;/li&gt;
&lt;li&gt; Experimental Jest support is added with Angular 16. &lt;/li&gt;
&lt;li&gt;&lt;p&gt;Planning to move all the existing Karma projects to Web Test Runner in future updates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can experiment with Jest in new projects by installing Jest with&lt;br&gt;
&lt;br&gt;
&lt;code&gt;npm install jest --save-dev&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
and updating your  angular.json file&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"projects"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"my-app"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"architect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"builder"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@angular-devkit/build-angular:jest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"tsConfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tsconfig.spec.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"polyfills"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"zone.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"zone.js/testing"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More unit testing strategies can be found right here 👉 &lt;a href="https://blog.angular.io/moving-angular-cli-to-jest-and-web-test-runner-ef85ef69ceca" rel="noopener noreferrer"&gt;Blog Post&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 Autocomplete imports in templates
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The language service now allows auto-import components and pipes.&lt;/li&gt;
&lt;li&gt;In v16

&lt;code&gt;TypeScript 5.0&lt;/code&gt;

support is added, with support for

&lt;code&gt;ECMAScript decorators&lt;/code&gt;

, removing the overhead of

&lt;code&gt;ngcc&lt;/code&gt;

, adding support for

&lt;code&gt;service workers&lt;/code&gt;

and app shell in standalone apps, expanding CSP support in the CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Improving Developer Experience
&lt;/h2&gt;

&lt;h3&gt;
  
  
  👉 Required inputs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In Angular 16, you can now define input values as required. &lt;/li&gt;
&lt;li&gt;You can either use the @Input decorator or the @Component decorator inputs array to define one.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Passing router data as component inputs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Now you can pass the following data to a routing component’s inputs

&lt;ul&gt;
&lt;li&gt;Route data — resolvers and data properties&lt;/li&gt;
&lt;li&gt;Path parameters&lt;/li&gt;
&lt;li&gt;Query parameters
*
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;about&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;loadComponent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./about&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;contact&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;getContact&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;About&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// The value of "contact" is passed to the contact input&lt;/span&gt;
  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nx"&gt;contact&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;You can enable this feature by using withComponentInputBinding as part of the provideRouter.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👉 CSP support for inline-styles
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The ngCspNonce attribute is useful if you have access to server-side templating that can add the nonce both to the header and the index.html when constructing the response.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;app&lt;/span&gt; &lt;span class="na"&gt;ngCspNonce=&lt;/span&gt;&lt;span class="s"&gt;"{% nonce %}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/app&amp;gt;&lt;/span&gt;  
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  👉 Self-closing tags
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A highly requested feature we recently implemented allows you to use self-closing tags for components in Angular templates
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;super-duper-long-component-name&lt;/span&gt; &lt;span class="na"&gt;[prop]=&lt;/span&gt;&lt;span class="s"&gt;"someVar"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more let us hear it from the creators&lt;/p&gt;

&lt;p&gt;Credits : &lt;a href="https://blog.angular.io/angular-v16-is-here-4d7a28ec680d" rel="noopener noreferrer"&gt;Official Announcement 😄&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Changelog : &lt;a href="https://github.com/angular/angular/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt; Repository &lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>angular</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>⭐Angular 15 Features ⭐</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Fri, 18 Nov 2022 13:55:34 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/angular-15-features-22dc</link>
      <guid>https://dev.to/sandeepbalachandran/angular-15-features-22dc</guid>
      <description>&lt;p&gt;Hey there,&lt;/p&gt;

&lt;p&gt;Version 15.0.0 is here and it has some great updates for Angular developers everywhere. 🎉🎉&lt;/p&gt;

&lt;h1&gt;
  
  
  TL;DR 🙌
&lt;/h1&gt;

&lt;p&gt;✅ Simplifying Angular with Stable Standalone APIs&lt;/p&gt;

&lt;p&gt;✅ Router and HttpClient tree-shakable standalone APIs&lt;/p&gt;

&lt;p&gt;✅ Directive composition API&lt;/p&gt;

&lt;p&gt;✅ Image directive is now stable!&lt;/p&gt;

&lt;p&gt;✅ Router unwraps default imports&lt;/p&gt;

&lt;p&gt;✅ Better stack traces&lt;/p&gt;

&lt;p&gt;✅ Automatic imports in language service&lt;/p&gt;

&lt;p&gt;✅ Angular CLI enhancements&lt;/p&gt;

&lt;p&gt;✅ Deprecation &lt;/p&gt;

&lt;h1&gt; How to update to version 15&lt;/h1&gt;

&lt;p&gt;Visit &lt;a href="https://update.angular.io" rel="noopener noreferrer"&gt;update.angular.io&lt;/a&gt; for detailed information and guidance. To have the best update experience,&lt;/p&gt;

&lt;p&gt;Update to 15&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng update @angular/cli @angular/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to update your global angular,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;center&gt;&lt;h2&gt;&lt;u&gt;What’s in this release?&lt;/u&gt;&lt;/h2&gt;&lt;/center&gt;

&lt;h2&gt;
  
  
  ✅ Simplifying Angular with Stable Standalone API 👌
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://angular.io/guide/standalone-components" rel="noopener noreferrer"&gt;Angular standalone components&lt;/a&gt; aim to streamline the authoring of Angular applications by reducing the need for NgModules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone alone APIs are no longer in developer preview and are now part of the stable API surface&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {bootstrapApplication} from '@angular/platform-browser';
import {ImageGridComponent} from'./image-grid';

@Component({
  standalone: true,
  selector: 'photo-gallery',
  imports: [ImageGridComponent],
  template: `
     &amp;lt;image-grid [images]="imageList"&amp;gt;&amp;lt;/image-grid&amp;gt;
  `,
})
export class PhotoGalleryComponent {
  // component logic
}
bootstrapApplication(PhotoAppComponent);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;👉 In v14, standalone components are in &lt;strong&gt;developer preview&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;👉 They are not stable API yet and will be potentially changed. But available to exploration and development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As per the official announcement an example of usage can be found over &lt;a href="https://gist.githubusercontent.com/twerske/6fa8f71a37cf28a24c439e01325784a4/raw/ce2097de9bbf19c7d7125b88f708cf40f9352f34/main.ts" rel="noopener noreferrer"&gt;here&lt;/a&gt;. 👈&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅Router and HttpClient tree-shakable standalone APIs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 It is possible to build a multi-route application using the new router standalone APIs
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {Routes} from '@angular/router';

import {LazyComponent} from './lazy.component';

export const lazyRoutes: Routes = [{path: '', component: LazyComponent}];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export const appRoutes: Routes = [{
  path: 'lazy',
  loadChildren: () =&amp;gt; import('./lazy/lazy.routes').then(routes =&amp;gt; routes.lazyRoutes)
}];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Register the appRoutes in the bootstrapApplication call
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bootstrapApplication(AppComponent, {
  providers: [
    provideRouter(appRoutes)
  ]
});

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;👉 &lt;strong&gt;provideRouter&lt;/strong&gt; API is tree-shakable&lt;/li&gt;
&lt;li&gt;Bundlers can remove unused features of the router at build-time&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Directive composition API
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 The directive composition API enables developers to enhance host elements with directives and equips Angular with a powerful code reuse strategy&lt;/li&gt;
&lt;li&gt;👉 &lt;strong&gt;The directive composition API only works with standalone directives&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;This feature was inspired by the most popular feature request on &lt;a href="https://github.com/angular/angular/issues/8785" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; asking for the functionality to add directives to a host element.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({
  selector: 'mat-menu',
  hostDirectives: [HasColor, {
    directive: CdkMenu,
    inputs: ['cdkMenuDisabled: disabled'],
    outputs: ['cdkMenuClosed: closed']
  }]
})
class MatMenu {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Image directive is now stable!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The v15 release also includes a few new features for the image directive&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👉 &lt;strong&gt;Automatic srcset generation&lt;/strong&gt; 

&lt;ul&gt;
&lt;li&gt;The directive ensures that an appropriately sized image is requested by generating the srcset attribute for you. &lt;/li&gt;
&lt;li&gt;This can reduce download times for your images.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;👉 &lt;strong&gt;Fill mode [experimental]&lt;/strong&gt; 

&lt;ul&gt;
&lt;li&gt;This mode causes the image to fill its parent container, removing the requirement to declare the image’s width and height. &lt;/li&gt;
&lt;li&gt;It’s a handy tool if you don’t know the sizes of your images or if you’d like to migrate CSS background images to use the directive.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The standalone NgOptimizedImage directive can be used directly in the component or NgModule:&lt;br&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { NgOptimizedImage } from '@angular/common';

// Include it into the necessary NgModule
@NgModule({
  imports: [NgOptimizedImage],
})
class AppModule {}

// ... or a standalone Component
@Component({
  standalone: true
  imports: [NgOptimizedImage],
})
class MyStandaloneComponent {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;To use it within a component just replace the image’s src attribute with ngSrc and make sure you specify the priority attribute for your LCP images&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Router unwraps default imports
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;To make the router simpler and reduce boilerplate further, the router now auto-unwraps default exports when lazy loading&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Before this change, to lazy load a standalone component&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  path: 'lazy',
  loadComponent: () =&amp;gt; import('./lazy-file').then(m =&amp;gt; m.LazyComponent),
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt; Now the router will look for a default export and if it finds it, use it automatically, which simplifies the route declaration to
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  path: 'lazy',
  loadComponent: () =&amp;gt; import('./lazy-file'),
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Better stack traces
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;More understandable stack errors &lt;/li&gt;
&lt;li&gt;👉 Instead of showing errors from third party dependencies error messages are more focused on code that developer has authored.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅Automatic imports in language service
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The language service now can automatically import components that you’re using in a template but haven’t added to a standalone component or an NgModule.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ CLI improvements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Now you can generate a new standalone component via

&lt;code&gt;ng g component --standalone&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Deprecations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;providedIn: 'any'&lt;/strong&gt; - The NgModule injector that receives the resolution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;providedIn: NgModule&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Team will stop publishing new releases of @angular/flex-layout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more let us hear it from the creators&lt;/p&gt;

&lt;p&gt;Credits : &lt;a href="https://blog.angular.io/angular-v15-is-now-available-df7be7f2f4c8" rel="noopener noreferrer"&gt;Official Announcement 😄&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Changelog : &lt;a href="https://github.com/angular/angular/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt; Repository &lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>angular</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>⭐Angular 14 Features ⭐</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Fri, 03 Jun 2022 16:51:19 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/angular-14-features-14ip</link>
      <guid>https://dev.to/sandeepbalachandran/angular-14-features-14ip</guid>
      <description>&lt;p&gt;Hey there,&lt;/p&gt;

&lt;p&gt;Version 14.0.0 is here and it has some great updates for Angular developers everywhere. 🎉🎉&lt;/p&gt;

&lt;h1&gt;
  
  
  TL;DR 🙌
&lt;/h1&gt;

&lt;p&gt;✅ &lt;strong&gt;Simplifying Angular with Standalone Components&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Typed Angular Forms&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Streamlined best practices&lt;/p&gt;

&lt;p&gt;✅ Extended developer diagnostics&lt;/p&gt;

&lt;p&gt;✅ Built-in improvements&lt;/p&gt;

&lt;p&gt;✅ Angular material component updates&lt;/p&gt;

&lt;p&gt;✅ Angular CLI enhancements&lt;/p&gt;

&lt;p&gt;✅ Docs Updated | Docs updating | Docs will be updated&lt;/p&gt;

&lt;h1&gt; How to update to version 14&lt;/h1&gt;

&lt;p&gt;Visit &lt;a href="https://update.angular.io" rel="noopener noreferrer"&gt;update.angular.io&lt;/a&gt; for detailed information and guidance. To have the best update experience,&lt;/p&gt;

&lt;p&gt;Update to 14&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng update @angular/cli @angular/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to update your global angular,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;center&gt;&lt;h2&gt;&lt;u&gt;What’s in this release?&lt;/u&gt;&lt;/h2&gt;&lt;/center&gt;

&lt;h2&gt;
  
  
  ✅ Simplifying Angular with Standalone Components 👌
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://angular.io/guide/standalone-components" rel="noopener noreferrer"&gt;Angular standalone components&lt;/a&gt; aim to streamline the authoring of Angular applications by reducing the need for NgModules.&lt;/li&gt;
&lt;li&gt;👉 In v14, standalone components are in &lt;strong&gt;developer preview&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;👉 They are not stable API yet and will be potentially changed. But available to exploration and development.&lt;/li&gt;
&lt;li&gt;As per the official announcement an example of usage can be found over &lt;a href="https://gist.githubusercontent.com/twerske/6fa8f71a37cf28a24c439e01325784a4/raw/ce2097de9bbf19c7d7125b88f708cf40f9352f34/main.ts" rel="noopener noreferrer"&gt;here&lt;/a&gt;. 👈&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyzn2ah85uqca9kc951p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyzn2ah85uqca9kc951p.png" alt="standalone compnoent" width="800" height="702"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👉 In component decorator you are able to make directives and pipes standalone by  &lt;strong&gt;standalone: true&lt;/strong&gt; flag which allows you to add imports directly in your @Component() without an @NgModule()&lt;/li&gt;
&lt;li&gt;Explore &lt;a href="https://stackblitz.com/edit/angular-standalone?file=src%2Fmain.ts" rel="noopener noreferrer"&gt;stackblitz&lt;/a&gt; demo  👈  for more&lt;/li&gt;
&lt;li&gt;We can create standalone component using CLI as follows
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ng generate component &amp;lt;name&amp;gt; --standalone

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅Typed Angular Forms
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 This feature was under the radar for a while now. The issue can be found &lt;a href="https://github.com/angular/angular/issues/13721" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👉 Typed forms ensure that the values inside of form controls, groups, and arrays are type safe across the entire API surface. &lt;/li&gt;
&lt;li&gt;👉 This enables safer forms, especially for deeply nested complex cases.&lt;/li&gt;
&lt;li&gt;Official gist is available &lt;a href="https://gist.githubusercontent.com/twerske/4f9f18f748584abd8edc3e608482922d/raw/62a49a22d22cc7aa8318fbcf9e5166f129a233ed/typed-angular-forms.ts" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7nl09r2bozpo0kym55s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7nl09r2bozpo0kym55s.png" alt="Typed Angular Forms" width="800" height="639"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Motivation&lt;/strong&gt; behind typed angular forms can be found 👉 &lt;a href="https://github.com/angular/angular/discussions/44513" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Streamlined best practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ 👉 Streamlined page title accessibility

&lt;ul&gt;
&lt;li&gt;It is a best practice to ensure that your app’s page titles uniquely communicate the page’s contents. &lt;/li&gt;
&lt;li&gt;v13.2 streamlines this with the new &lt;em&gt;Route.title&lt;/em&gt; property in the Angular Router. &lt;/li&gt;
&lt;li&gt;Adding a title now requires no additional imports and is strongly typed&lt;/li&gt;
&lt;li&gt;gist can be found &lt;a href="https://gist.github.com/twerske/16f4d998c5b87c589cd2b6ec015f8732/raw/f34ecd959b1b99764f235761e0d2e717bbcd5a37/app-routing.module.ts" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpeb4si656qffmyhv8cgf.png" alt="Streamlined page title accessibility" width="800" height="696"&gt;
&lt;/li&gt;
&lt;li&gt;In these examples, 

&lt;ul&gt;
&lt;li&gt;👉 navigating to ​​&lt;em&gt;‘/about’&lt;/em&gt; will set the document title to &lt;em&gt;‘My App — About Me’&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;👉 while navigating to &lt;em&gt;‘/home’&lt;/em&gt; will set the document title to &lt;em&gt;‘My App — Home’&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Extended developer diagnostics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;New &lt;a href="https://angular.io/extended-diagnostics" rel="noopener noreferrer"&gt;extended diagnostics&lt;/a&gt; provide an extendable framework that gives you more insight into your templates and how you might be able to improve them. &lt;/li&gt;
&lt;li&gt;Diagnostics give compile-time warnings with precise, actionable suggestions for your templates, catching bugs before run-time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👉 Catch the invalid “Banana in a box” error on your two-way data bindings 👉 &lt;a href="https://github.com/angular/angular/discussions/44513" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://angular.io/extended-diagnostics/NG8101" rel="noopener noreferrer"&gt;Official Reference&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 Catch nullish coalescing on non-nullable values 👉 &lt;a href="https://github.com/angular/angular/discussions/44513" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://angular.io/extended-diagnostics/NG8102" rel="noopener noreferrer"&gt;Official Refernce&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 Tree-shakeable error messages
&lt;/h3&gt;

&lt;h2&gt;
  
  
  ✅ More built-in improvements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bind to protected component members&lt;/strong&gt; - you can now bind to protected component members directly from your templates,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optional injectors in Embedded Views&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NgModel OnPush&lt;/strong&gt; - NgModel changes are reflected in the UI for OnPush components.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Angular CLI enhancements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; Now every flag uses &lt;em&gt;--lower-skewer-case&lt;/em&gt; format&lt;/li&gt;
&lt;li&gt; Removed deprecated camel case arguments support and added support for combined aliases usage&lt;/li&gt;
&lt;li&gt; 👉 &lt;strong&gt;ng completion&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt; v14  introduces real-time type-ahead autocompletion for command such as &lt;em&gt;ng serve&lt;/em&gt;!&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt; 👉 &lt;strong&gt;ng analytics&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt; The CLI’s analytics command allows you to control analytics settings and print analytics information&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt; 👉 &lt;strong&gt;ng cache&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt; ng cache provides a way to control and print cache information from the command line. &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Angular DevTools is available offline and in Firefox
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Angular DevTools debugging extension now supports offline use&lt;/li&gt;
&lt;li&gt; For Firefox users, find the extension in the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/angular-devtools/" rel="noopener noreferrer"&gt;Add-ons for Mozilla&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Experimental ESM Application Build
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Finally, v14 introduces an experimental esbuild-based build system for ng build, which compiles pure ESM output.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more let us hear it from the creators&lt;/p&gt;

&lt;p&gt;Credits : &lt;a href="https://blog.angular.io/angular-v14-is-now-available-391a6db736af" rel="noopener noreferrer"&gt;Official Announcement 😄&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Changelog : &lt;a href="https://github.com/angular/angular/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt; Repository &lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>angular</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>⭐Angular 13 Features ⭐</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Thu, 04 Nov 2021 07:18:50 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/angular-13-features-5b1e</link>
      <guid>https://dev.to/sandeepbalachandran/angular-13-features-5b1e</guid>
      <description>&lt;p&gt;Hey there,&lt;/p&gt;

&lt;p&gt;Version 13.0.0 is here and it has some great updates for Angular developers everywhere. 🎉🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR 🙌
&lt;/h2&gt;

&lt;p&gt;✅ &lt;strong&gt;View Engine is no longer available in Angular as of v13&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Changes to the Angular Package Format (APF)&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Component API updates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ End of IE11 support&lt;/p&gt;

&lt;p&gt;✅ Improvements to the Angular CLI&lt;/p&gt;

&lt;p&gt;✅ Framework changes and dependency updates ( &lt;strong&gt;TypeScript 4.4&lt;/strong&gt;, &lt;strong&gt;Rxjs 7.4&lt;/strong&gt;)&lt;/p&gt;

&lt;p&gt;✅ Improvements to Angular tests&lt;/p&gt;

&lt;p&gt;✅ Angular material component updates&lt;/p&gt;

&lt;p&gt;✅ PR merges from community&lt;/p&gt;

&lt;p&gt;✅ Docs Updated | Docs updating | Docs will be updated&lt;/p&gt;

&lt;h1&gt; How to update to version 13&lt;/h1&gt;

&lt;p&gt;Visit &lt;a href="https://update.angular.io" rel="noopener noreferrer"&gt;update.angular.io&lt;/a&gt; for detailed information and guidance. To have the best update experience,&lt;/p&gt;

&lt;p&gt;Update to 13&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng update @angular/cli @angular/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to update your global angular,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;center&gt;&lt;h2&gt;&lt;u&gt;What’s in this release?&lt;/u&gt;&lt;/h2&gt;&lt;/center&gt;

&lt;h2&gt;
  
  
  ✅ Ivy is the default engine available in  v13 👌
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Angular team already mentioned they will be removing View Engine from future major releases.&lt;/li&gt;
&lt;li&gt;Read about this from Minko Gechev right &lt;a href="https://blog.angular.io/upcoming-improvements-to-angular-library-distribution-76c02f782aa4" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👉 Removing View Engine also means that Angular can reduce its reliance on ngcc &lt;a href="https://angular.io/guide/glossary#ngcc" rel="noopener noreferrer"&gt;(Angular compatibility compiler)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Changes to the Angular Package Format (APF)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; 👉 Libraries built with the latest version of the APF ( &lt;a href="https://angular.io/guide/angular-package-format" rel="noopener noreferrer"&gt;Angular package format&lt;/a&gt;) will no longer require the use of ngcc because of standardization on more modern JS formats such as ES2020.&lt;/li&gt;
&lt;li&gt; As a result of these changes library developers can expect leaner package output and faster execution&lt;/li&gt;
&lt;li&gt; Removed older output formats, including View Engine specific metadata from APF in v13&lt;/li&gt;
&lt;li&gt; update in APF to support Node Package Exports which help developers from inadvertently relying on internal APIs that may change.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Component API update
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Before the changes in Angular v13, dynamically creating components required a lot of boilerplate code.&lt;/li&gt;
&lt;li&gt;👉 The new API removes the need for &lt;a href="https://angular.io/api/core/ComponentFactoryResolver" rel="noopener noreferrer"&gt;ComponentFactoryResolver&lt;/a&gt; being injected into the constructor. &lt;/li&gt;
&lt;li&gt;👉 Ivy creates the opportunity to instantiate the component with &lt;a href="https://angular.io/api/core/ViewContainerRef#createComponent" rel="noopener noreferrer"&gt;ViewContainerRef.createComponent&lt;/a&gt; without creating an associated factory.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Creating components with previous versions of Angular
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxp6i32e757rdso7bpmam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxp6i32e757rdso7bpmam.png" alt="Creating components v12" width="800" height="794"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  With the new API, this code can become:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft3rx7um7er85r80mrsyi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft3rx7um7er85r80mrsyi.png" alt="Creating components v13" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ End of IE11 support 🎉
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This allows Angular to leverage modern browser features such as &lt;strong&gt;CSS variables and web animations via native web APIs&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;👉 Apps will be smaller and load faster because we can remove &lt;strong&gt;IE specific polyfills and code paths&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;It also removes the need for &lt;a href="https://angular.io/guide/deployment#differential-loading" rel="noopener noreferrer"&gt;differential loading&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Running ng update will automatically drop these IE-specific polyfills and reduce bundle size during project migration&lt;/li&gt;
&lt;li&gt;👉 Developers who still need to support IE11 users for existing projects can continue to use Angular v12 and it will be supported until &lt;a href="https://angular.io/guide/releases#support-policy-and-schedule" rel="noopener noreferrer"&gt;November 2022&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Improvements to the Angular CLI
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 Angular now supports the use of persistent build cache by default for new v13 projects. Read it &lt;a href="https://github.com/angular/angular-cli/issues/21545" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;To enable this features developers can add this configuration to &lt;code&gt;angular.json&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz92061lf28qwjremday6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz92061lf28qwjremday6.png" alt="angular.json config" width="800" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read more about it &lt;a href="https://next.angular.io/cli/cache" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Framework changes and dependency update
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 Support for &lt;strong&gt;TypeScript 4.4&lt;/strong&gt; . Read it &lt;a href="https://devblogs.microsoft.com/typescript/announcing-typescript-4-4/" rel="noopener noreferrer"&gt;here&lt;/a&gt; 🎉&lt;/li&gt;
&lt;li&gt;👉 &lt;strong&gt;RxJS 7.4&lt;/strong&gt; is now the default for v13&lt;/li&gt;
&lt;li&gt;Existing apps using RxJS v6.x will have to manually update using the &lt;code&gt;npm install rxjs@7.4&lt;/code&gt; command. Migration instructions can be read it &lt;a href="https://rxjs.dev/6-to-7-change-summary" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;From angular 11 support for inline google font was introduced
&lt;/li&gt;
&lt;li&gt;👉 Now in v13 support extended to Adobe Fonts&lt;/li&gt;
&lt;li&gt;Inlining fonts can improve your app performance by speeding up the First Contentful Paint &lt;a href="https://web.dev/first-contentful-paint/" rel="noopener noreferrer"&gt;(FCP)&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;This change is now enabled for everyone by default! All you need to do is &lt;code&gt;ng update&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Improvements to Angular test
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 TestBed that now does a better job of tearing down test modules and environments after each test&lt;/li&gt;
&lt;li&gt;The DOM is now cleaned after every test and developers can expect faster, less memory-intensive, less interdependent, and more optimized tests
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Angular material component updates
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;All the MDC-based components have been evaluated to meet elevated a11y standards on areas such as contrast, touch targets, ARIA, and more&lt;/li&gt;
&lt;li&gt;👉 Pull requests regarding Accessibility (a11y) standard can be read &lt;a href="https://github.com/angular/components/pulls?q=is%3Apr+is%3Aclosed+label%3Aa11y" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ PR merges from community
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 Dynamically enable/disable validators - &lt;a href="https://github.com/angular/angular/pull/42565" rel="noopener noreferrer"&gt;#42565&lt;/a&gt; 🎉&lt;/li&gt;
&lt;li&gt;👉 Making the SwUpdate API a little more ergonomic - &lt;a href="https://github.com/angular/angular/pull/43668" rel="noopener noreferrer"&gt;#43668&lt;/a&gt; 🎉&lt;/li&gt;
&lt;li&gt;👉 Language Service config to enable auto-apply optional chaining on nullable symbol - &lt;a href="https://github.com/angular/vscode-ng-language-service/pull/1469" rel="noopener noreferrer"&gt;#1469&lt;/a&gt; 🎉&lt;/li&gt;
&lt;li&gt;👉 Router emit activate/deactivate events when an outlet gets attached/detached - &lt;a href="https://github.com/angular/angular/pull/43333" rel="noopener noreferrer"&gt;#4333&lt;/a&gt; 🎉&lt;/li&gt;
&lt;li&gt;👉 Restore history after canceled navigation - &lt;a href="https://github.com/angular/angular/pull/38884" rel="noopener noreferrer"&gt;#38884&lt;/a&gt;     🎉

&lt;ul&gt;
&lt;li&gt;   Router flag to restore the computed value of the browser history when set to computed
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwwcdfxy5fu3s2cbhkw5h.png" alt="routing changes" width="800" height="335"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;For more let us hear it from the creators&lt;/p&gt;

&lt;p&gt;Credits : &lt;a href="https://blog.angular.io/angular-v13-is-now-available-cce66f7bc296" rel="noopener noreferrer"&gt;Official Announcement 😄&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Changelog : &lt;a href="https://github.com/angular/angular/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt; Repository &lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>angular</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🤷‍♂️ How to build and deploy angular application to surge using github actions</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Sun, 24 Oct 2021 15:02:14 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/how-to-build-and-deploy-angular-application-to-surge-using-github-actions-38h9</link>
      <guid>https://dev.to/sandeepbalachandran/how-to-build-and-deploy-angular-application-to-surge-using-github-actions-38h9</guid>
      <description>&lt;p&gt;Hey there, 🖐&lt;/p&gt;

&lt;p&gt;Suppose you have an angular application and need to automate building and deployment also you are looking for how to do it. &lt;/p&gt;

&lt;p&gt;You are in the right place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 Angular application&lt;/li&gt;
&lt;li&gt;👉 Github account&lt;/li&gt;
&lt;li&gt;👉 surge token and domain name&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisite
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 Push your application to github repo&lt;/li&gt;
&lt;li&gt;👉 Add a  folder .github/workflows/ in the root location and create a file with an extension of yml inside of it . Lets say (deplyment.yml) ( .github/workflows/)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Add name for your workflow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="na"&gt;name &lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build and Deploy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;If you omit name inside the workflow file, GitHub will set workflow name to the workflow file path relative to the root of the repository.&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  ✅ Setup trigger
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A workflow trigger is required for a workflow. We need to provide event that trigger the workflow&lt;/li&gt;
&lt;li&gt;Read more about it right &lt;a href="https://docs.github.com/en/actions/reference/events-that-trigger-workflows" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;master'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;So on pushing the master branch. Change as you want.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Create angular build
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In GitHub Actions, jobs are defined by a series of steps that are executed on a runner.&lt;/li&gt;
&lt;li&gt;Each job runs on a different workspace, meaning that files and job side effects are not kept between jobs.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The latest version of Ubuntu GitHub-hosted runner is utilized for this job&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jobs will not pull  the source code by default, you need to explicitly tell the job to do so&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;This action checks-out your repository , so your workflow can access it. More about actions/checout@v1 right &lt;a href="https://github.com/actions/checkout" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Setup Node.js
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Use Node 12.x&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v1&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;12.x'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;This action sets by node environment for use in actions by:

&lt;ul&gt;
&lt;li&gt;Optionally downloading and caching a version of node - npm by version spec and add to PATH&lt;/li&gt;
&lt;li&gt;Registering problem matchers for error output&lt;/li&gt;
&lt;li&gt;Configuring authentication for GPR or npm&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Read it &lt;a href="https://github.com/actions/setup-node" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Run build
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install dependencies&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm run build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Upload artifact
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;To expose the results of the current job to the next job, we can configure build  job to upload the build artifacts
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Archive build&lt;/span&gt;
  &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;success()&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/upload-artifact@v1&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deploy_dist&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dist&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;if: success() is used to make sure upload artifact only runs if all the previous steps passed&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  ✅ Create Deploy Job
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
  &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build&lt;/span&gt;
  &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;needs: build is used to tell GitHub to only execute deploy job when build and test job completed successfully.&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  ✅ Download build artifact
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Download build&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/download-artifact@v1&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deploy_dist&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Install surge
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install surge a&lt;/span&gt;
    &lt;span class="s"&gt;uses&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v1&lt;/span&gt;
    &lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;12.x'&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install -g surge&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Deployment
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;surge ./deploy_dist/projectname ${{ secrets.SURGE_DOMAIN }} --token ${{ secrets.SURGE_TOKEN }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  SURGE_DOMAIN
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;DOMAIN_NAME - Set the secret in settings -&amp;gt; Secrets -&amp;gt; New repository secret&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  SURGE_TOKEN
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;TOKEN -  Set the secret in settings -&amp;gt; Secrets -&amp;gt; New repository secret&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Type in terminal as follows to get surge token
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;surge token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Conclusion
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build and Deploy&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;master'&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build and Test&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Use Node 12.x&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;12.x'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install dependencies&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm run build&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Archive build&lt;/span&gt;
        &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;success()&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/upload-artifact@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deploy_dist&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dist&lt;/span&gt;
  &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploying to surge&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Download build&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/download-artifact@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deploy_dist&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install surge and fire deployment&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;12.x'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install -g surge&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;surge ./deploy_dist/projectname ${{ secrets.SURGE_DOMAIN }} --token ${{ secrets.SURGE_TOKEN }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>devops</category>
      <category>angular</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>⭐Angular 12 Now Available ⭐</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Thu, 13 May 2021 05:39:44 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/angular-12-now-available-1004</link>
      <guid>https://dev.to/sandeepbalachandran/angular-12-now-available-1004</guid>
      <description>&lt;p&gt;Hey there,&lt;/p&gt;

&lt;p&gt;Version 12.0.0 is here and it has some great updates for Angular developers everywhere. 🎉🎉&lt;/p&gt;

&lt;h1&gt;
  
  
  TL;DR 🙌
&lt;/h1&gt;

&lt;p&gt;✅ &lt;strong&gt;Moving closer to IVY engine and get rid of view engine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Getting rid of protractor. Adding support to Cypress, WebdriverIO, and TestCafe&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Nullish Coalescing in templates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Docs Updated | Docs updating | Docs will be updated&lt;/p&gt;

&lt;p&gt;✅ Stylish improvements&lt;/p&gt;

&lt;p&gt;✅ Strict mode by default&lt;/p&gt;

&lt;p&gt;✅ Ivy-based Language Service&lt;/p&gt;

&lt;p&gt;✅ Experimental support for Webpack 5&lt;/p&gt;

&lt;p&gt;✅ supporting TypeScript version to 4.2 ( 4.3 is in beta)&lt;/p&gt;

&lt;p&gt;✅ Bye bye IE11 - New deprecation warning message in Angular v12 — and remove support for IE11 in Angular v13&lt;/p&gt;

&lt;p&gt;✅ PR merges from community&lt;/p&gt;

&lt;h1&gt; How to update to version 12&lt;/h1&gt;

&lt;p&gt;Visit &lt;a href="https://update.angular.io" rel="noopener noreferrer"&gt;update.angular.io&lt;/a&gt; for detailed information and guidance. To have the best update experience,&lt;/p&gt;

&lt;p&gt;Update to 12&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng update @angular/cli @angular/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to update your global angular,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  What’s in this release?
&lt;/h1&gt;

&lt;h2&gt;
  
  
  ✅ Moving closer to IVY engine 👌
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;View Engine is basically deprecated, it will be removed in a future major release&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Current libraries using View Engine will still work with Ivy apps (no work is required by developers), but library authors should start planning to transition to Ivy.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Read about this from &lt;a href="https://blog.angular.io/upcoming-improvements-to-angular-library-distribution-76c02f782aa4" rel="noopener noreferrer"&gt;Minko Gechev&lt;/a&gt;  right &lt;a href="https://blog.angular.io/upcoming-improvements-to-angular-library-distribution-76c02f782aa4" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Goodbye to Protractor
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Angular 12 opted to not include protractor in new projects and, instead, provide options with popular 3rd party solutions in the Angular CLI. Angular team currently working with Cypress, WebdriverIO, and TestCafe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New things to learn 🎉🎉&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Nullish Coalescing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;We can use nullish coalescing in angular components
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0eet0uiqhiswdmd5pbje.png" alt="nullish" width="800" height="343"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  ✅ Documentation updates
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;👉 &lt;a href="https://v12.angular.io/guide/content-projection" rel="noopener noreferrer"&gt;Content projection guide&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;👉 &lt;a href="https://angular.io/guide/contributors-guide-overview" rel="noopener noreferrer"&gt;Contriubtors guide&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;👉 &lt;a href="https://blog.angular.io/angular-debugging-guides-dfe0ef915036" rel="noopener noreferrer"&gt;Guides and videos&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Stylish Improvements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Angular components will now support inline Sass . Previously, Sass was only available in external resources due to the Angular compiler&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To enable this feature in your existing applications add&lt;br&gt;
&lt;br&gt;
&lt;code&gt;"inlineStyleLanguage": "scss”&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
to angular.json. Otherwise, it will be available to new projects using SCSS&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  In the v11.2 release,  added support for Tailwind CSS.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;install the tailwindcss package from npm &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;initialize Tailwind to create the &lt;code&gt;tailwind.config.js&lt;/code&gt;in your project. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now, teams are ready to start using Tailwind in Angular.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Great Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;👉&lt;code&gt; ng build &lt;/code&gt; now defaults to production which saves teams some extra steps and helps to prevent accidental development builds in production . ng build === ng build --prod&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;👉 Strict mode is enabled by default in the CLI&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;👉 The Ivy-based Language Service is moving from opt-in to on by default&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;👉 Added experimental support for Webpack 5&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;👉  Updating the supported TypeScript version to 4. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Bye Bye IE11
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 New IE11 deprecation warning message in Angular v12 — and remove support for IE11 in Angular v13&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Multiple code merges
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 &lt;a href="https://github.com/angular/angular/pull/25839" rel="noopener noreferrer"&gt;#25839&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👉 &lt;a href="https://github.com/angular/angular/pull/25751" rel="noopener noreferrer"&gt;#25751&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👉 &lt;a href="https://github.com/angular/angular/pull/39063" rel="noopener noreferrer"&gt;#39063&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👉 &lt;a href="https://github.com/angular/angular/pull/33222" rel="noopener noreferrer"&gt;#33222&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more let us hear it from the creators&lt;/p&gt;

&lt;p&gt;Credits : &lt;a href="https://blog.angular.io/angular-v12-is-now-available-32ed51fbfd49" rel="noopener noreferrer"&gt;Official Announcement 😄&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>angular</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Journey from 2020 to 2021</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Sun, 03 Jan 2021 16:52:30 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/journey-from-2020-to-2021-12fc</link>
      <guid>https://dev.to/sandeepbalachandran/journey-from-2020-to-2021-12fc</guid>
      <description>&lt;p&gt;Hey there 🖐,&lt;br&gt;
It is that time of the year again. Happy holidays. Sun had to witness earth rotating for nothing again. Also i thought adding a post summarizing what i have done throughout the year and some of the objectives for the future year to come.&lt;/p&gt;

&lt;h2&gt;
  
  
  I changed my job 🏢
&lt;/h2&gt;




&lt;h2&gt;
  
  
  Published 46 posts in dev.to until now ✍
&lt;/h2&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/sandeepbalachandran/machine-learning-introduction-400o"&gt;Machine learning&lt;/a&gt; (22)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/sandeepbalachandran/angular-dark-fate-48dp"&gt;Angular&lt;/a&gt;(7)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/sandeepbalachandran/how-to-generate-pdf-and-send-it-on-mail-in-laravel-5-8-b8j"&gt;Laravel&lt;/a&gt;(2)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/sandeepbalachandran/javascript-journey-31hb"&gt;Javascript&lt;/a&gt;(1)&lt;/li&gt;
&lt;li&gt;Miscellaneous(14)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Started maintaining a number of open-source projects. 🎉
&lt;/h2&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ngx-sand-typeahead ✅ &lt;a href="https://github.com/SandeepBalachandran/ngx-sand-typeahead" rel="noopener noreferrer"&gt;Go to Github&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A typeahead package for angular framework&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Pytheract ✅ &lt;a href="https://github.com/SandeepBalachandran/Pytheract" rel="noopener noreferrer"&gt;Go to Github&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An Image extraction tool using tesseract and  pytesseract wrapper.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Pythonophobia ✅&lt;a href="https://github.com/SandeepBalachandran/Pythonophobia" rel="noopener noreferrer"&gt;Go to Github&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A collection of python programs listed with beginners,average, advanced developers.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I learned in 2020
&lt;/h2&gt;




&lt;ul&gt;
&lt;li&gt;Angular

&lt;ul&gt;
&lt;li&gt;Basic unit testing using Jasmine and Karma&lt;/li&gt;
&lt;li&gt;Angular library creation&lt;/li&gt;
&lt;li&gt;Authentication with keycloak&lt;/li&gt;
&lt;li&gt;Keycloak theme customization&lt;/li&gt;
&lt;li&gt;Concepts of multitenancy with keycloak&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Basic understandings of data Science with Python&lt;/li&gt;

&lt;li&gt;Basics of

&lt;ul&gt;
&lt;li&gt;Numpy&lt;/li&gt;
&lt;li&gt;Matplotlib&lt;/li&gt;
&lt;li&gt;pandas&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Machine Learning concepts&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basics of scikit&lt;/li&gt;
&lt;li&gt;Intro to tensorflow.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Morse code  ( a little ). Required pen and paper 🤣&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;More spanish lesssons and vocabulary 💪&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Juggling with 3 and 4 balls 🥎🥎🥎🥎&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I want to learn/do in 2021
&lt;/h2&gt;




&lt;ul&gt;
&lt;li&gt;Data structures and algorithms&lt;/li&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Tensorflow 2 concepts&lt;/li&gt;
&lt;li&gt;Angular Advanced Concepts

&lt;ul&gt;
&lt;li&gt;Microfrontend&lt;/li&gt;
&lt;li&gt;Multitenancy &lt;/li&gt;
&lt;li&gt;Server side rendering.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Advancing in spanish language.&lt;/li&gt;

&lt;li&gt;Starting my own blog.&lt;/li&gt;

&lt;li&gt;To build a good workstation&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Thtats pretty much the end of it. Share your achievements and objectives if interested. &lt;/p&gt;

&lt;p&gt;Later then . &lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>beginners</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How to use Streamlit :The fastest way to build and share data apps.</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Thu, 31 Dec 2020 13:35:18 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/how-to-use-streamlit-the-fastest-way-to-build-and-share-data-apps-5hhj</link>
      <guid>https://dev.to/sandeepbalachandran/how-to-use-streamlit-the-fastest-way-to-build-and-share-data-apps-5hhj</guid>
      <description>&lt;p&gt;Hey there 🖐,&lt;br&gt;
Before moving on to the content , take a quick look. 👀&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F80rhg92j1mvofqscfupe.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F80rhg92j1mvofqscfupe.gif" alt="Alt Text" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Table of contents
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Streamlit is an open-source Python library that makes it easy to create and share beautiful, custom web apps for machine learning and data science. 🤩&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In just a few minutes you can build and deploy powerful data apps 🚀🚀 - so let’s get started!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Make sure that you have Python 3.6 or greater installed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install Streamlit using PIP and run the ‘hello world’ app:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install streamlit
streamlit hello
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Create your first Streamlit app
&lt;/h2&gt;

&lt;p&gt;First, we’ll create a new Python script and import Streamlit.&lt;/p&gt;

&lt;p&gt;Create a new Python file named app.py, then open it with your IDE or text editor.&lt;/p&gt;

&lt;p&gt;Next, import Streamlit&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;streamlit&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;
&lt;span class="c1"&gt;# To make things easier later, we're also importing numpy and pandas for
# working with sample data.
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run your app. A new tab will open in your default browser. It’ll be blank for now. That’s OK.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;streamlit run app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Write a data frame&lt;br&gt;
Along with magic commands, st.write() is Streamlit’s “Swiss Army knife”. You can pass almost anything to st.write(): text, data, Matplotlib figures, Altair charts, and more. Don’t worry, Streamlit will figure it out and render things the right way.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;My first app&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Here&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s our first attempt at using data to create a table:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;first column&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;second column&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;output will be like&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6haehog2qnajqg4lvxtv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6haehog2qnajqg4lvxtv.png" alt="theme" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Draw charts and maps
&lt;/h2&gt;

&lt;p&gt;Streamlit supports several popular data charting libraries like Matplotlib, Altair, deck.gl, and more. In this section, you’ll add a bar chart, line chart, and a map to your app.&lt;/p&gt;

&lt;p&gt;Draw a line chart&lt;br&gt;
You can easily add a line chart to your app with st.line_chart(). We’ll generate a random sample using Numpy and then chart it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;chart_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
     &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
     &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;line_chart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chart_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvj0s3zdf77tequy79qv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvj0s3zdf77tequy79qv6.png" alt="theme" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Plot a map
&lt;/h2&gt;

&lt;p&gt;With st.map() you can display data points on a map. Let’s use Numpy to generate some sample data and plot it on a map of San Francisco.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;map_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;37.76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;122.4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;lat&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;lon&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscxeipxfv2ibo1opslwn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscxeipxfv2ibo1opslwn.png" alt="theme" width="800" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Show progress
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;When adding long running computations to an app, you can use st.progress() to display status in real time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First, let’s import time. We’re going to use the time.sleep() method to simulate a long running computation:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import time&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Then add the code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;left_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;right_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;beta_columns&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;latest_iteration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;bar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;pre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;left_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Start counter&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Update the progress bar with each iteration.
&lt;/span&gt;    &lt;span class="n"&gt;latest_iteration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Iteration &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F19dya5ppbdfmh4f2sv8g.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F19dya5ppbdfmh4f2sv8g.gif" alt="Alt Text" width="600" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Share your app
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;After you’ve built a Streamlit app, it’s time to share it! To show it off to the world you can use Streamlit sharing to deploy, manage, and share your app for free. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Streamlit sharing is currently invitation only so  request an invite .&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It works in 3 simple steps: 🥳&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Put your app in a public Github repo (and make sure it has a requirements.txt!)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sign into share.streamlit.io&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click ‘Deploy an app’ and then paste in your GitHub URL&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s it! 🎈You now have a publicly deployed app that you can share with the world. 💪&lt;/p&gt;

&lt;p&gt;Read more about how to make apps - &lt;a href="https://docs.streamlit.io/en/stable/getting_started.html" rel="noopener noreferrer"&gt;Official docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read more about how to share - &lt;a href="https://www.streamlit.io/sharing" rel="noopener noreferrer"&gt;Official workflow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thats it for now. &lt;/p&gt;

&lt;p&gt;This was my very last post on the year 2020. What an interesting and weired year it has been in all the worst ways lads!!! &lt;/p&gt;

&lt;blockquote&gt;So in retrospect, in 2015, not a single person got the answer right to "Where do you see yourself 5 years from now?"&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwssk08stkritdkuy5w49.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwssk08stkritdkuy5w49.gif" alt="sad" width="480" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the bright side, I  got to write more contents on this year than any other year.&lt;/p&gt;

&lt;p&gt;It is finaly over. I wanted to say thank to each one of you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwolufsr4d1kycqi5bone.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwolufsr4d1kycqi5bone.gif" alt="thanks" width="480" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading my contents. If you learned something new from my posts please let me know. &lt;/p&gt;

&lt;p&gt;Dont hesitate to share if there any mistakes that i need to correct or topics that i have to research more.&lt;/p&gt;

&lt;p&gt;See you next year&lt;/p&gt;

&lt;p&gt;Hasta Pronto ! 🙌🙌&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjso4343dxloqe2ll29k3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjso4343dxloqe2ll29k3.gif" alt="Alt Text" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>MkDocs : Static HTML sites and documentation preparation tool that you can host on GitHub pages</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Mon, 21 Dec 2020 13:39:23 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/mkdocs-static-html-sites-and-documentation-preparation-tool-that-you-can-host-on-github-pages-262f</link>
      <guid>https://dev.to/sandeepbalachandran/mkdocs-static-html-sites-and-documentation-preparation-tool-that-you-can-host-on-github-pages-262f</guid>
      <description>&lt;p&gt;Hey there,&lt;br&gt;
I have been doing R&amp;amp;D for upcoming project which seem relatively large compared to other works . So i was looking for a document preparation tool to organize everything. At first google docs was a good option which was very quick , easy to use and  maintain. But as the content of the research increases it becomes harder to track each points. &lt;br&gt;
so I came up with MkDocs which seems good. &lt;/p&gt;

&lt;p&gt;Let us see how to set it up in no time. &lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MkDocs is a fast, simple and downright gorgeous static site generator that's geared towards building project documentation. &lt;/li&gt;
&lt;li&gt;Documentation source files are written in Markdown, and configured with a single YAML configuration file.&lt;/li&gt;
&lt;li&gt;The built-in dev-server allows you to preview your documentation as you're writing it. It will even auto-reload and refresh your browser whenever you save your changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Manual Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ python --version
Python 3.8.5
$ pip --version
pip 20.3.3 from C:\Users\username\Anaconda3\lib\site-packages\pip (python 3.8)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install --upgrade pip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installing MkDocs
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install mkdocs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mkdocs --version
mkdocs, version 1.1.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
mkdocs new demo
cd demo

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;There's a single configuration file named mkdocs.yml, and a folder named docs that will contain your documentation source files. &lt;/li&gt;
&lt;li&gt;&lt;p&gt;Right now the docs folder just contains a single documentation page, named index.md.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MkDocs comes with a built-in dev-server that lets you preview your documentation as you work on it. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure you're in the same directory as the mkdocs.yml configuration file, and then start the server by running the mkdocs serve command:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
$ mkdocs serve
INFO    -  Building documentation...
INFO    -  Cleaning site directory
[I 160402 15:50:43 server:271] Serving on http://127.0.0.1:8000
[I 160402 15:50:43 handlers:58] Start watching changes
[I 160402 15:50:43 handlers:60] Start detecting changes

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open up &lt;a href="http://127.0.0.1:8000/" rel="noopener noreferrer"&gt;http://127.0.0.1:8000/&lt;/a&gt; in your browser, and you'll see the default home page being displayed:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The dev-server also supports auto-reloading&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the docs/index.md document in your text editor of choice, change the initial heading to your choice, and save your changes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now try editing the configuration file: mkdocs.yml. Change the site_name setting to what you always wanted to view and save the file.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Adding pages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;As our documentation site will include some navigation headers, you may want to edit the configuration file and add some information about the order, title, and nesting of each page in the navigation header by adding a nav setting:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;site_name: MkLorum
nav:
&lt;span class="p"&gt;    -&lt;/span&gt; Home: index.md
&lt;span class="p"&gt;    -&lt;/span&gt; About: about.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Save your changes and you'll now see a navigation bar with Home and About items on the left as well as Search, Previous, and Next items on the right.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Theming our documentation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Now change the configuration file to alter how the documentation is displayed by changing the theme. Edit the mkdocs.yml file and add a theme setting:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;site_name: MkLorum
nav:
&lt;span class="p"&gt;    -&lt;/span&gt; Home: index.md
&lt;span class="p"&gt;    -&lt;/span&gt; About: about.md
theme: readthedocs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Building the site
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;That's looking good. You're ready to deploy the first pass of your MkLorum documentation. First build the documentation:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdocs build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;This will create a new directory, named site. Take a look inside the directory:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ls site
about  fonts  index.html  license  search.html
css    img    js          mkdocs   sitemap.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Notice that your source documentation has been output as two HTML files named index.html and about/index.html. &lt;/li&gt;
&lt;li&gt;You also have various other media that's been copied into the site directory as part of the documentation theme. &lt;/li&gt;
&lt;li&gt;&lt;p&gt;You even have a sitemap.xml file and mkdocs/search_index.json.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you're using source code control such as git you probably don't want to check your documentation builds into the repository. * Add a line containing site/ to your .gitignore file.&lt;/p&gt;
&lt;h2&gt;
  
  
  Other Commands and Options
&lt;/h2&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdocs --help
mkdocs build --help

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more information check out official docs : &lt;a href="https://www.mkdocs.org/" rel="noopener noreferrer"&gt;Officil site&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;If you have more suggestions about document preparation please consider sharing your thoughts in the comment section. &lt;/blockquote&gt;

&lt;p&gt;Thats it for now. Hasta Pronto ! 🙌🙌&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Angular 11 Now Available</title>
      <dc:creator>Sandeep Balachandran</dc:creator>
      <pubDate>Thu, 12 Nov 2020 07:25:50 +0000</pubDate>
      <link>https://dev.to/sandeepbalachandran/angular-11-now-available-8g8</link>
      <guid>https://dev.to/sandeepbalachandran/angular-11-now-available-8g8</guid>
      <description>&lt;p&gt;Hey there,&lt;/p&gt;

&lt;p&gt;Version 11.0.0 is here and it has some great updates for Angular developers everywhere. This release has updates across the platform including the framework, the CLI and components.&lt;/p&gt;

&lt;h1&gt;
  
  
  TL;DR
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Easily use Hot Module Replacement just setting the '--hrm' flag in ng serve&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;In the CLI now inlining fonts to ensure apps load as fast as possible&lt;/li&gt;
&lt;li&gt;The CLI build output is much more helpful and well strucutured&lt;/li&gt;
&lt;li&gt;Experimental opt in preview support for webpack v 5.&lt;/li&gt;
&lt;li&gt;Bug fixes and new features.
&lt;h1&gt; How to update to version 11&lt;/h1&gt;
Visit &lt;a href="https://update.angular.io" rel="noopener noreferrer"&gt;update.angular.io&lt;/a&gt; for detailed information and guidance. To have the best update experience,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Update to 11&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng update @angular/cli @angular/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to update your global angular,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  What’s in this release?
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Updated Hot Module Replacement (HMR) Support
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng serve --hmr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Angular has offered support for HMR but enabling it required configuration and code changes making it less than ideal to quickly include in Angular projects. Read about HMR right &lt;a href="https://webpack.js.org/concepts/hot-module-replacement/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Updates on Operation Byelog
&lt;/h2&gt;

&lt;p&gt;In Angular’s &lt;a href="https://angular.io/guide/roadmap" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt;, one of the items was Operation Byelog where  committed to putting a significant engineering effort towards triaging issues and PRs until have a clear understanding of the broader community needs.&lt;br&gt;
Going forward all new issues reported will be triaged within 2 weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automatic Inlining of Fonts
&lt;/h2&gt;

&lt;p&gt;To make your apps even faster by speeding up their first contentful paint, introducing automatic font inlining. During compile time Angular CLI will download and inline fonts that are being used and linked in the application.&lt;/p&gt;

&lt;h1&gt;
  
  
  Component Test Harnesses
&lt;/h1&gt;

&lt;p&gt;Read about it right &lt;a href="https://material.angular.io/cdk/test-harnesses/overview" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Improved Reporting and Logging
&lt;/h1&gt;

&lt;p&gt;Bringing in new CLI output updates to make logs and reports easier to read.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F759%2F0%2A-dCa80651cnfbjpX" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F759%2F0%2A-dCa80651cnfbjpX" alt="dd" width="607" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Updated Language Service Preview
&lt;/h1&gt;

&lt;p&gt;The updated language service provides a more powerful and accurate experience for developers&lt;/p&gt;

&lt;p&gt;Now, the language service will be able to correctly infer generic types in templates the same way the TypeScript compiler does. For example, in the screenshot below we’re able to infer that the iterable is of type string.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F875%2F0%2AL1Tg13gdu3PCqUNN" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F875%2F0%2AL1Tg13gdu3PCqUNN" alt="dd" width="875" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more lets hear it from the creators&lt;/p&gt;

&lt;p&gt;Credits : &lt;a href="https://blog.angular.io/version-11-of-angular-now-available-74721b7952f7" rel="noopener noreferrer"&gt;Official Announcement 😄&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>angular</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
