Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Modern Angular: Renovation for Your Applications
Search
Manfred Steyer
PRO
October 24, 2024
Programming
650
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Modern Angular: Renovation for Your Applications
Manfred Steyer
PRO
October 24, 2024
More Decks by Manfred Steyer
See All by Manfred Steyer
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
370
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
170
Nostalgia Meets Technology: Super Mario with TypeScript
manfredsteyer
PRO
0
250
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
270
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
190
Agentic UI
manfredsteyer
PRO
0
280
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
320
Agentic UI beyond Chats Architecture Patterns & Open Standards @ngMunich 05/2026
manfredsteyer
PRO
0
270
Agentic AI in the Frontend: Architectures with Open Standards @iJS London 2026
manfredsteyer
PRO
0
200
Other Decks in Programming
See All in Programming
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
280
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.7k
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
240
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
220
React本体のコードリーディング
high_g_engineer
1
150
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
700
Building a Meta Ray-Ban display app
akkeylab
0
160
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
420
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
500
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
650
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
190
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
150
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
55
12k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
How to make the Groovebox
asonas
2
2.3k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Design in an AI World
tapps
1
280
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Transcript
@ManfredSteyer Modern Angular: Renovation for Your Applications ManfredSteyer
@ManfredSteyer Agenda #1 esbuild #2a Standalone Components #2b Standalone APIs:
Router & Http #3 Signals #4 SSR & Hydration #5 Control Flow & @defer
@ManfredSteyer About me… Manfred Steyer, ANGULARarchitects.io (Remote) Angular Workshops and
Consulting Google Developer Expert for Angular Blog, Books, Articles, and Talks about Angular Manfred Steyer
@ManfredSteyer #1: esbuild
@ManfredSteyer New Generation of Bundlers webpack vite
@ManfredSteyer ng update
@ManfredSteyer #2: Standalone Components & APIs
@ManfredSteyer NgModules + EcmaScript Modules import { NgModule } from
'@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { AppComponent } from './app.component'; […] @NgModule({ imports: [BrowserModule, OtherModule], declarations: [AppComponent, OtherComponent, OtherDirective], providers: [], bootstrap: [AppComponent], }) export class AppModule {} TypeScript Modules Angular Modules
@ManfredSteyer Standalone Components @Component({ standalone: true, imports: [ […], FlightCardComponent,
CityPipe, CityValidator, ], selector: 'flight-search', templateUrl: '…' }) export class FlightSearchComponent { […] }
@ManfredSteyer Global Providers bootstrapApplication(AppComponent, { providers: [ MyGlobalService, importProvidersFrom(LegacyModule), provideRouter(APP_ROUTES),
] });
@ManfredSteyer Standalone Component → NgModules @Component({ standalone: true, selector: 'app-root',
imports: [ […] TicketsModule, ], templateUrl: '…' }) export class AppComponent { }
@ManfredSteyer Standalone Component → NgModules @Component({ standalone: true, selector: 'app-root',
imports: [ […] TicketsModule, ], templateUrl: '…' }) export class AppComponent { }
@ManfredSteyer NgModule → Standalone Blocks @NgModule({ imports: [ FlightCardComponent, ],
declarations: [ MyTicketsComponent ], }) export class TicketsModule { }
@ManfredSteyer NgModule → Standalone Blocks @NgModule({ imports: [ FlightCardComponent, ],
declarations: [ MyTicketsComponent ], }) export class TicketsModule { }
@ManfredSteyer Automatic Migration ng g @angular/core:standalone
@ManfredSteyer DEMO
@ManfredSteyer More Migrations ng g @angular/core:route-lazy-loading ng g @angular/core:inject-migration
@ManfredSteyer #3: Signals
@ManfredSteyer Signals: Simple Reactivity Signal as Producer 4711 Consumer read
set notify 4712
@ManfredSteyer Component With Signals flights = signal<Flight[]>([]); const flights =
await this.flightService.findAsPromise(from, to); this.flights.set(flights); <div *ngFor="let f of flights()"> <flight-card [item]="f" /> </div>
@ManfredSteyer DEMO
@ManfredSteyer Stores Streamline Reactive Flow Component Store "Intention" Signal sync/
async computed() computed()
@ManfredSteyer NGRX Signal Store export const FlightBookingStore = signalStore( {
providedIn: 'root' }, […] );
@ManfredSteyer NGRX Signal Store export const FlightBookingStore = signalStore( {
providedIn: 'root' }, withState({ from: 'Paris', to: 'London', […] }), […] );
@ManfredSteyer NGRX Signal Store export const FlightBookingStore = signalStore( {
providedIn: 'root' }, withState({ from: 'Paris', to: 'London', […] }), withComputed(([…]) => ({ […] })), withMethods(([…]) => ({ })), withHooks({ […] }) );
@ManfredSteyer DEMO
@ManfredSteyer #4: SSR & Hydration
@ManfredSteyer When to use SSR? B2C Initial Page Loads Conversion
Rate! SEO Social Preview
@ManfredSteyer Adding SSR ng new myProject --ssr or ng add
@angular/ssr
@ManfredSteyer DEMO
@ManfredSteyer #5: New Control Flow & @defer
@ManfredSteyer @if @if(auth.userName) { <h2>Welcome {{auth.userName}}!</h2> } @else { <h2>Welcome!</h2>
<p>Please log in!</p> }
@ManfredSteyer @if @if(auth.userName) { <h2>Welcome {{auth.userName}}!</h2> } @else if(auth.trial) {
<h2>Welcome to this trial version!</h2> <p>Please sign up to get the full version!</p> } @else { <h2>Welcome!</h2> <p>Please log in!</p> }
@ManfredSteyer @for @for(f of flights; track f.id) { <flight-card [item]="f"
[(selected)]="basket[f.id]" /> }
@ManfredSteyer @for @for(f of flights; track f.id) { <flight-card [item]="f"
[(selected)]="basket[f.id]" /> } @empty { <p>No flights found!</p> }
@ManfredSteyer Automatic Migration ng g @angular/core:control-flow
@ManfredSteyer DEMO
@ManfredSteyer @defer @defer (on viewport) { <app-lazy></app-lazy> } @placeholder {
<div>Placeholder</div> }
@ManfredSteyer DEMO
@ManfredSteyer Free eBook (2nd Edition) angularArchitects.io/modern
@ManfredSteyer Summary esbuild: Build Performance Standalone: Simplicity APIs for Router
& Http: Simplicity Signals: Reactivity & Performance SSR: Simplicity & Initial Page Load Control Flow & @defer: Simplicity & Performance
@ManfredSteyer Contact and Downloads [web] ANGULARarchitects.io [twitter] ManfredSteyer d Slides
& Examples Remote Company Workshops and Consulting http://angulararchitects.io