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
3 Effective Rules for Using Signals in Angular
Search
Manfred Steyer
PRO
November 12, 2024
Programming
520
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
3 Effective Rules for Using Signals in Angular
Manfred Steyer
PRO
November 12, 2024
More Decks by Manfred Steyer
See All by Manfred Steyer
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
71
Nostalgia Meets Technology: Super Mario with TypeScript
manfredsteyer
PRO
0
120
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
210
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
130
Agentic UI
manfredsteyer
PRO
0
210
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
280
Agentic UI beyond Chats Architecture Patterns & Open Standards @ngMunich 05/2026
manfredsteyer
PRO
0
240
Agentic AI in the Frontend: Architectures with Open Standards @iJS London 2026
manfredsteyer
PRO
0
160
Agentic AI & UI: Arcitecture, HITL, Emerging Standards
manfredsteyer
PRO
0
190
Other Decks in Programming
See All in Programming
Inside Stream API
skrb
1
810
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.5k
dRuby over BLE
makicamel
2
400
act1-costs.pdf
sumedhbala
0
140
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
280
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
320
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.8k
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
200
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.1k
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
210
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
120
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
450
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
30 Presentation Tips
portentint
PRO
1
330
Navigating Team Friction
lara
192
16k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
Tell your own story through comics
letsgokoyo
1
980
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
170
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Building the Perfect Custom Keyboard
takai
2
800
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Transcript
AngularArchitects.io | @ManfredSteyer | @RainerHahnekamp 3 Effective Rules for Using
Signals in Angular
None
None
None
Agenda • Austrian Desserts • Computed • Resource API •
Effects • Stores
Result 3 Rules (of thumb)
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
Austrian Desserts: Example App
Demo
Computed: Extremely Unterrated!
Reactive Programming: Paradigm Shift!
Marble Run
Marble Run Data Binding
Reactive Flow with Computed desserts = signal<Dessert[]>([]); ratings = signal<DessertIdToRatingMap>({});
ratedDesserts = computed(() => this.toRated(this.desserts(), this.ratings()));
Reactive Flow with Computed desserts = signal<Dessert[]>([]); ratings = signal<DessertIdToRatingMap>({});
ratedDesserts = computed(() => this.toRated(this.desserts(), this.ratings()));
Demo Branch: 02a-input-signals
Reactive Flow with Computed desserts = signal<Dessert[]>([]); ratings = signal<DessertIdToRatingMap>({});
ratedDesserts = computed(() => this.toRated(this.desserts(), this.ratings())); originalName = signal(''); englishName = signal(''); Load Desserts
Resource API
Resource API dessertsResource = resource({ request: this.dessertsCriteria, loader: (param) =>
{ return this.#dessertService.findPromise(param.request); } }); Experimental in Angular 19
Resource API dessertsResource = resource({ request: this.dessertsCriteria, loader: (param) =>
{ return this.#dessertService.findPromise(param.request); } }); dessertsCriteria = computed(() => ({ originalName: this.originalName(), englishName: this.englishName(), })); desserts = this.dessertsResource.value; ratedDesserts = computed(() => this.toRated(this.desserts, …));
Resource Prevents Race Conditions Pancakes Sacher Cake Ice Cream Pancakes
Resource Prevents Race Conditions Pancakes Sacher Cake Ice Cream Pancakes
„switchMap semantics“
Demo Branch: 2c-resource
Architecture Rule #1 Derive state where possible
Effects
Connecting Reactive and Imperative World
None
Ideal-typical Tasks • Drawing on a canvas • Manual DOM
manipulations • Logging • Synching with LocalStore Stuff, you cannot do with data binding Rendering (and similar tasks …)
Demo Branch: 04c-effects
Architecture Rule #2 Avoid effects triggering business logic
Instead: Reactive Helpers like Resource API @ngrx/signals ngxtension Your Own
…
Reactive Helpers: Effects Under the Hood
Demo Branch: 08b-details
Stores
None
None
None
Stores Streamline Reactive Flow Component Store "Intention" Signal sync/ async
computed() computed()
Demo Branch: 08b-details
Architecture Rule #3 Stores make your reactive flow more manageable
Free eBook (6th Edition) angularArchitects.io/ebook
Conclusion Architecture Rule #1 Derive state where possible Architecture Rule
#2 Avoid effects triggering business logic Architecture Rule #3 Stores make your reactive flow more manageable
None
Marble Run
AngularArchitects.io Slides & Examples ManfredSteyer