Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Signals & Resource API in Angular: 3 Effective ...

Signals & Resource API in Angular: 3 Effective Rules for Your Architecture @BASTA 2025 in Mainz

Avatar for Manfred Steyer

Manfred Steyer PRO

September 24, 2025
Tweet

More Decks by Manfred Steyer

Other Decks in Programming

Transcript

  1. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten Signals &

    Resource API in Angular 3 Effective Rules for Your Architecture ANGULARarchitects.io
  2. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 6 1)

    Reactive Angular with Signals 101 2) Reactive Graph 3) Effects 4) Conclusion: 3 Rules for your Architecture Agenda
  3. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 7 About

    Me (Remote) Angular Workshops and Consulting Google Developer Expert for Angular Blog, Books, Articles, and Talks about Angular Manfred Steyer, ANGULARarchitects.io
  4. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 9 Signals:

    Simple Reactivity Signal as Producer 4711 Consumer read set notify 4712
  5. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 11 Component

    With Signals desserts = signal<Dessert[]>([]); const desserts = await this.dessertService.find(); this.desserts.set(desserts); @for(dessert of desserts(); track dessert.id) { <dessert-card [dessert]="dessert" /> }
  6. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 13 Building

    Your Reactive Graph desserts = signal<Dessert[]>([]); ratings = signal<DessertIdToRatingMap>({}); ratedDesserts = computed(() => this.toRated(this.desserts(), this.ratings()));
  7. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 14 Building

    Your Reactive Graph desserts = signal<Dessert[]>([]); ratings = signal<DessertIdToRatingMap>({}); ratedDesserts = computed(() => this.toRated(this.desserts(), this.ratings()));
  8. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten desserts =

    signal<Dessert[]>([]); ratings = signal<DessertIdToRatingMap>({}); ratedDesserts = computed(() => this.toRated(this.desserts(), this.ratings())); 16 Building Your Reactive Graph originalName = signal(''); englishName = signal(''); Load Desserts
  9. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 17 httpResource

    dessertsResource = httpResource(() => ({ url: 'http://demo.angulararchitects.io/...', params: { originalName: this.originalName(), englishName: this.englishName(), } })); desserts = this.dessertsResource.value; ratedDesserts = computed(() => this.toRated(this.desserts, …)); originalName = signal(''); englishName = signal('');
  10. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 19 Resource

    Prevents Race Conditions Sacher Cake Apple Strudel Ice Cream Pancakes „switchMap semantics“
  11. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 23 •

    Drawing on a canvas • Manual DOM manipulations • Logging • Synching with LocalStore Ideal-typical Tasks Rendering (and similar tasks …) Stuff, you cannot do with data binding
  12. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 25 Architecture

    Rule #1 Derive state where possible (Sync: computed, Async: Resource API) Architecture Rule #2 Avoid effects for triggering business logic! Architecture Rule #3 Reactive Helpers (Resource API, Signal Store) streamline your reactive flow Conclusion
  13. • Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 27 [Social

    Media] Manfred Steyer [web] ANGULARarchitects.io Manfred Steyer @ Manfred Steyer Slides & Examples Remote Company Workshops and Consulting http://angulararchitects.io