Google's full-featured framework — TypeScript-first, opinionated, and built for large enterprise apps. Comes with everything: router, forms, HTTP, DI, testing.
← Back to Client Side@Component, with separate template & styles.@Component({ selector: 'app-product-list', standalone: true, template: ` @if (loading()) { <p>Loading…</p> } @else { <ul> @for (p of products(); track p.id) { <li>{{ p.name }} — \${{ p.price }}</li> } </ul> } ` }) export class ProductListComponent { private http = inject(HttpClient); products = signal<Product[]>([]); loading = signal(true); constructor() { this.http.get<Product[]>('/api/products') .subscribe(data => { this.products.set(data); this.loading.set(false); }); } }
One of Angular's defining features — a hierarchical DI tree assembles your app at runtime. Services are injected via constructor or the modern inject() function. Lifetimes: root, module, component.
Fine-grained reactivity that's replacing zone-based change detection. Signals make Angular updates more predictable and faster, while interoperating with RxJS for streams.
First-party forms library with validation, async validators, dynamic controls. HttpClient integrates with RxJS for cancellation, retries, interceptors.
Recent Angular versions deprecated NgModules in favor of standalone components. The @if, @for, @switch control flow syntax (v17) replaces older *ngIf directives — cleaner templates, better performance.
| Category | Tools |
|---|---|
| CLI | ng new, ng generate, ng build — best-in-class scaffolding. |
| State | NgRx, NGXS, Akita, Signal Store. |
| UI Kits | Angular Material, PrimeNG, Nebular, Taiga UI. |
| SSR | Angular Universal, Analog (meta-framework). |
| Test | Karma + Jasmine (default), Jest, Cypress, Playwright. |
Banking, ERP, complex internal tools.
Conventions enforce consistency across hundreds of devs.
Stable upgrade story; same code style for years.
Reactive Forms + validation are best-in-class.