Angular 16 Unveiled: Discover the Top 7 Features
Tags: angular, webdev, whatsnew
Published: 2023-06-02 05:17:24

---
title: Angular 16 Unveiled: Discover the Top 7 Features
published: true
date: 2023-05-29 11:29:23 UTC
tags: angular, webdev, whatsnew
canonical_url: https://www.syncfusion.com/blogs/post/angular-16-top-7-features.aspx
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yuogec1rsm3g9f5s4fdz.png
---
[Angular](https://angular.io/ "Angular") released a major version upgrade, Angular 16, on May 3, 2023. As an Angular developer, I found this upgrade interesting since there were some significant improvements compared to the previous version.

So, in this article, I will discuss the top 7 features of Angular 16 to give you a better understanding.

## 1. Angular Signals

[Angular Signals](https://angular.io/guide/signals "Angular Signals") is the main feature developers have been waiting for since the Angular 16 roadmap was released. Although Solid.js inspired this concept, it is a whole new concept for Angular. It allows you to define reactive values and express dependencies between them. In other words, you can efficiently use Angular signals to manage state changes within Angular applications.

A signal can be recognized as a regular variable that users can synchronously access. But it comes with some additional features like notifying others (component templates, other signals, functions, etc.) of its value changes and creating a derived state in a declarative way.

The following [example](https://angular-7hfstb.stackblitz.io/ "Angular Signal example on Stackblitz") shows how to use Angular signals.

```js
import { Component, computed, effect, signal } from '@angular/core';
import { CommonModule } from '@angular/common';
import { bootstrapApplication } from '@angular/platform-browser';

@Component({
  selector: 'my-app',
  standalone: true,
  imports: [CommonModule],
  template: `
    <h1>Calculate Area</h1>
    <p>Answer : {{ area() }}</p>
    <button (click)="calculateArea(10,10)">Click</button>
  `,
})

export class App {
    height = signal(5);
    width = signal(5);
    area = computed(() => this.height() * this.width());
    constructor() {
      effect(() => console.log('Value changed:', this.area()));
    }
    calculateArea(height: number, width: number) {
      this.height.set(height);
      this.width.set(width);
    }
}
```

In this example, I have created a computed value **area** and two signals named **height** and **width**. When the values of the signals are changed by invoking the **calculateArea()** function, the computed value will be updated and displayed in the template. Here is a working [Stackblitz example](https://stackblitz.com/edit/angular-7hfstb?file=src/main.ts "Angular Signals Stackblitz Example") for you to try it.

Although this looks fantastic, Angular has not abandoned zone.js and RxJS. Signals are an optional feature, and Angular will still work without them. Angular will gradually [improve Signals](https://github.com/angular/angular/discussions/49682 "Angular Signal-based components GitHub demo") in upcoming versions to make it a complete package.
## 2. Server-Side Rendering

The lack of server-side rendering (SSR) support was one of the most significant drawbacks of Angular compared to React. Angular 16 has resolved this issue with some significant improvements for server-side rendering.

Before, Angular used destructive hydration for SSR. In destructive hydration, the server first renders and loads the application to the browser. Then, when the client app gets downloaded and bootstrapped, it destroys the already rendered DOM and re-renders the client app from scratch. This approach caused significant UX issues, like screen flickering, and negatively impacted some Core Web Vitals such as LCP or CLS.anug.

Angular 16 introduces a new approach called **non-destructive hydration** to prevent these drawbacks. The DOM is not destroyed when the client app is downloaded and bootstrapped. It uses the same DOM while enriching it with client-side features like event listeners.

Non-destructive hydration is still at the developer preview stage. But you can enable it by adding [provideClientHydration()](https://angular.io/api/platform-browser/provideClientHydration "Angular provideClientHydration method") as a provider when bootstrapping the application.

```js
import {
 bootstrapApplication,
 provideClientHydration,
} from '@angular/platform-browser';

...

bootstrapApplication(RootCmp, {
 providers: [provideClientHydration()]
});
```

According to the official Angular release note, this is just the beginning. They plan to explore partial hydration as the next step and work on several developer requests. You can find more about the Angular SSR development plan [here](https://blog.angular.io/whats-next-for-server-side-rendering-in-angular-2a6f27662b67 "Blog: What’s next for Server Side Rendering in Angular").

## 3. Experimental Jest Support

[Jest](https://jestjs.io/ "Jest") is one of the most-used testing frameworks among JavaScript developers. Angular has listened to developer requests and has introduced experimental Jest support with Angular 16.

All you have to do is install Jest using npm and update the **angular.json** file.

```js
// Install jest
npm install jest --save-dev

// angular.json
{
  "projects": {
    "my-app": {
      "architect": {
        "test": {
          "builder": "@angular-devkit/build-angular:jest",
          "options": {
            "tsConfig": "tsconfig.spec.json",
            "polyfills": ["zone.js", "zone.js/testing"]
          }
        }
      }
   }
}
```

They plan to move all the existing Karma projects to Web Test Runner in future updates.
## 4. esbuild-Based Build System

Angular 16 introduces an esbuild-based build system for the development server (ng serve). Vite powers this new development server and uses esbuild to build artifacts.

This is still at the developer preview stage, but you can enable it by updating the **angular.json** file with the following.

```js
"architect": {
  "build": { 
    "builder": "@angular-devkit/build-angular:browser-esbuild",
...
```

## 5. Required Inputs

In Angular 16, you can now define input values as required. You can either use the **@Input** decorator or the **@Component** decorator inputs array to define one.

```js
export class App {
  @Input({ required: true }) name: string = '';
}

// or
@Component({
  ...
  inputs: [
    {name: 'name', required: true}
  ]
})
```

## 6. Router Inputs

Angular 16 allows you to bind route parameters into component inputs, removing the need to inject **ActivatedRoute** into the components. To enable this feature, you must import **RouterModule** and enable the **bindToComponentInputs** property in the **app.module.ts** file.

```js
@NgModule({
 imports: [
   ...
   RouterModule.forRoot([], {
     bindToComponentInputs: true 
   })
   ...
 ],
 ...
})
export class AppModule {}

```

The following example shows how we can bind query params to component inputs.

```js
// Route
const routes: Routes = [
 {
   path: "articles",
   component: ArticleComponent,
 },
];

// Component
@Component({})
export class ArticleComponent implements OnInit {
  
  @Input() articleId?: string; 
  
  ngOnInit() {
  
  }
}
```

Now, when you navigate to the articles route, you can pass query params using the name of the component input. In this case, an example URL will look like the following.

```js
http://localhost:4200/articles?articleId=001
```

If the input name is too long, you can rename the query parameter.

```js
http://localhost:4200/articles?id=001

@Input('id') articleId?: string;
```

You can also use this approach to bind path parameters and route data.
## 7. Standalone Project Support

Angular 14 started supporting standalone components, which are independent of modules. Angular 16 takes this to the next level by supporting standalone project creation.

Angular 16 has a flag to create a standalone project through the Angular CLI. You have to execute **ng new** command with the **–standalone** flag. Then, it will generate a project without **NgModules**.

```
ng new --standalone
```

![Standalone Project Support in Angular 16](https://www.syncfusion.com/blogs/wp-content/uploads/2023/05/Standalone-Project-Support-2.png)

## Other Features

Angular 16 comes with many other changes that improve the developer experience:

- Auto-importing of components and pipes through the language service.
- Support for TypeScript 5.0, ECMAScript decorators, service workers, and SCP through the CLI.
- CSP support for online styles.
- Self-closing tags.
- Cease of support for ngcc and TypeScript 4.8.

## Conclusion

Overall, Angular 16 has delivered some significant features. Most of these features are stepping stones to much larger updates we can expect in the subsequent versions. You can follow Angular’s official [documentation](https://angular.io/guide/update-to-version-16 "Update Angular to v16") to upgrade your existing projects to Angular 16.

Syncfusion’s [Angular UI component](https://www.syncfusion.com/angular-ui-components "Angular UI components") library is the only suite you will ever need to build an app. It contains over 75 high-performance, lightweight, modular, and responsive UI components in a single package.

For existing customers, the newest Essential Studio version is available for download from the [License and Downloads](https://www.syncfusion.com/account/downloads "Essential Studio license and downloads page") page. If you are not yet a Syncfusion customer, you can try our 30-day [free trial](https://www.syncfusion.com/downloads "Free evaluation of the Essential Studio products") to check out the available features. Also, check out our demos on [GitHub](https://github.com/syncfusion "Syncfusion GitHub demos").

If you have questions, contact us through our [support forums](https://www.syncfusion.com/forums "Syncfusion Support Forum"), [support portal](https://support.syncfusion.com/ "Syncfusion Support Portal"), or [feedback portal](https://www.syncfusion.com/feedback/angular "Syncfusion Feedback Portal"). We are always happy to assist you!

## Related Blogs

- [4 Best Angular Charts for Revealing Trends Over Time](https://www.syncfusion.com/blogs/post/angular-charts-revealing-trends.aspx "Blog: 4 Best Angular Charts for Revealing Trends Over Time")
- [5 Front-End Web Frameworks to Consider Other Than React](https://www.syncfusion.com/blogs/post/5-front-end-web-frameworks-other-than-react.aspx "Blog: 5 Front-End Web Frameworks to Consider Other Than React")
- [View Word, Excel, and PowerPoint Files in Angular Application](https://www.syncfusion.com/blogs/post/view-word-excel-powerpoint-in-angular.aspx "Blog: View Word, Excel, and PowerPoint Files in Angular Application")
- [A Complete Guide to Creating a Mind Map Using Angular Diagram Component](https://www.syncfusion.com/blogs/post/mind-map-using-angular-diagram.aspx "Blog: A Complete Guide to Creating a Mind Map Using Angular Diagram Component")