From d0f0c0824fd3fa9e58516ec1ca2e63d3b2abea73 Mon Sep 17 00:00:00 2001 From: Ben Hong Date: Mon, 8 Sep 2025 18:37:11 -0400 Subject: [PATCH] docs: add signals tutorial (#62750) PR Close #62750 --- .../1-creating-your-first-signal/README.md | 67 ++++--- .../answer/src/app/app.css | 31 ++++ .../src/app/app.ts | 17 +- .../README.md | 6 +- .../answer/src/app/app.css | 0 .../answer/src/app/app.ts | 15 +- .../config.json | 0 .../src/app/app.css | 0 .../src/app/app.ts | 15 +- .../README.md | 0 .../config.json | 0 .../README.md | 62 +++---- .../src/app/app.ts | 12 +- .../README.md | 16 +- .../answer/src/app/app.css | 22 ++- .../answer/src/app/app.ts | 24 +-- .../src/app/app.css | 22 ++- .../src/app/app.ts | 45 +++-- .../README.md | 64 ++++--- .../src/app/app.ts | 9 +- .../README.md | 171 +++++------------ .../answer/src/app/app.css | 15 +- .../answer/src/app/app.ts | 57 +----- .../answer/src/app/product-card.ts | 25 +-- .../answer/src/app/quantity-selector.ts | 34 ---- .../config.json | 2 +- .../src/app/app.css | 15 +- .../src/app/app.ts | 84 ++------- .../src/app/product-card.ts | 9 +- .../src/app/quantity-selector.ts | 23 --- .../README.md | 128 +++++++++++++ .../answer/src/app/app.css | 81 ++++++++ .../answer/src/app/app.ts | 63 +++++++ .../answer/src/app/custom-checkbox.ts | 28 +++ .../config.json | 5 + .../src/app/app.css | 81 ++++++++ .../src/app/app.ts | 57 ++++++ .../src/app/custom-checkbox.ts | 25 +++ .../6-using-signals-with-services/README.md | 173 ------------------ .../7-using-signals-with-directives/README.md | 138 -------------- .../7-using-signals-with-services/README.md | 103 +++++++++++ .../answer/src/app/app.css | 0 .../answer/src/app/app.ts | 0 .../answer/src/app/cart-display.ts | 0 .../answer/src/app/cart-store.ts | 0 .../answer/src/app/cart-types.ts | 0 .../config.json | 2 +- .../src/app/app.css | 0 .../src/app/app.ts | 0 .../src/app/cart-display.ts | 15 +- .../src/app/cart-store.ts | 9 +- .../src/app/cart-types.ts | 0 .../8-using-signals-with-directives/README.md | 110 +++++++++++ .../answer/src/app/app.css | 0 .../answer/src/app/app.ts | 0 .../answer/src/app/highlight-directive.ts | 0 .../config.json | 0 .../src/app/app.css | 0 .../src/app/app.ts | 0 .../src/app/highlight-directive.ts | 0 .../README.md | 6 +- .../answer/src/app/app.css | 0 .../answer/src/app/app.ts | 0 .../answer/src/app/cart-summary.ts | 0 .../answer}/src/app/product-card.ts | 16 +- .../config.json | 0 .../src/app/app.css | 0 .../src/app/app.ts | 0 .../src/app/cart-summary.ts | 20 +- .../src/app/product-card.ts | 16 +- 70 files changed, 1107 insertions(+), 831 deletions(-) rename adev/src/content/tutorials/signals/steps/{9-reacting-to-signal-changes-with-effect => 10-reacting-to-signal-changes-with-effect}/README.md (86%) rename adev/src/content/tutorials/signals/steps/{9-reacting-to-signal-changes-with-effect => 10-reacting-to-signal-changes-with-effect}/answer/src/app/app.css (100%) rename adev/src/content/tutorials/signals/steps/{9-reacting-to-signal-changes-with-effect => 10-reacting-to-signal-changes-with-effect}/answer/src/app/app.ts (89%) rename adev/src/content/tutorials/signals/steps/{9-reacting-to-signal-changes-with-effect => 10-reacting-to-signal-changes-with-effect}/config.json (100%) rename adev/src/content/tutorials/signals/steps/{9-reacting-to-signal-changes-with-effect => 10-reacting-to-signal-changes-with-effect}/src/app/app.css (100%) rename adev/src/content/tutorials/signals/steps/{9-reacting-to-signal-changes-with-effect => 10-reacting-to-signal-changes-with-effect}/src/app/app.ts (87%) rename adev/src/content/tutorials/signals/steps/{10-next-steps => 11-next-steps}/README.md (100%) rename adev/src/content/tutorials/signals/steps/{10-next-steps => 11-next-steps}/config.json (100%) delete mode 100644 adev/src/content/tutorials/signals/steps/5-component-communication-with-signals/answer/src/app/quantity-selector.ts delete mode 100644 adev/src/content/tutorials/signals/steps/5-component-communication-with-signals/src/app/quantity-selector.ts create mode 100644 adev/src/content/tutorials/signals/steps/6-two-way-binding-with-model-signals/README.md create mode 100644 adev/src/content/tutorials/signals/steps/6-two-way-binding-with-model-signals/answer/src/app/app.css create mode 100644 adev/src/content/tutorials/signals/steps/6-two-way-binding-with-model-signals/answer/src/app/app.ts create mode 100644 adev/src/content/tutorials/signals/steps/6-two-way-binding-with-model-signals/answer/src/app/custom-checkbox.ts create mode 100644 adev/src/content/tutorials/signals/steps/6-two-way-binding-with-model-signals/config.json create mode 100644 adev/src/content/tutorials/signals/steps/6-two-way-binding-with-model-signals/src/app/app.css create mode 100644 adev/src/content/tutorials/signals/steps/6-two-way-binding-with-model-signals/src/app/app.ts create mode 100644 adev/src/content/tutorials/signals/steps/6-two-way-binding-with-model-signals/src/app/custom-checkbox.ts delete mode 100644 adev/src/content/tutorials/signals/steps/6-using-signals-with-services/README.md delete mode 100644 adev/src/content/tutorials/signals/steps/7-using-signals-with-directives/README.md create mode 100644 adev/src/content/tutorials/signals/steps/7-using-signals-with-services/README.md rename adev/src/content/tutorials/signals/steps/{6-using-signals-with-services => 7-using-signals-with-services}/answer/src/app/app.css (100%) rename adev/src/content/tutorials/signals/steps/{6-using-signals-with-services => 7-using-signals-with-services}/answer/src/app/app.ts (100%) rename adev/src/content/tutorials/signals/steps/{6-using-signals-with-services => 7-using-signals-with-services}/answer/src/app/cart-display.ts (100%) rename adev/src/content/tutorials/signals/steps/{6-using-signals-with-services => 7-using-signals-with-services}/answer/src/app/cart-store.ts (100%) rename adev/src/content/tutorials/signals/steps/{6-using-signals-with-services => 7-using-signals-with-services}/answer/src/app/cart-types.ts (100%) rename adev/src/content/tutorials/signals/steps/{6-using-signals-with-services => 7-using-signals-with-services}/config.json (86%) rename adev/src/content/tutorials/signals/steps/{6-using-signals-with-services => 7-using-signals-with-services}/src/app/app.css (100%) rename adev/src/content/tutorials/signals/steps/{6-using-signals-with-services => 7-using-signals-with-services}/src/app/app.ts (100%) rename adev/src/content/tutorials/signals/steps/{6-using-signals-with-services => 7-using-signals-with-services}/src/app/cart-display.ts (80%) rename adev/src/content/tutorials/signals/steps/{6-using-signals-with-services => 7-using-signals-with-services}/src/app/cart-store.ts (77%) rename adev/src/content/tutorials/signals/steps/{6-using-signals-with-services => 7-using-signals-with-services}/src/app/cart-types.ts (100%) create mode 100644 adev/src/content/tutorials/signals/steps/8-using-signals-with-directives/README.md rename adev/src/content/tutorials/signals/steps/{7-using-signals-with-directives => 8-using-signals-with-directives}/answer/src/app/app.css (100%) rename adev/src/content/tutorials/signals/steps/{7-using-signals-with-directives => 8-using-signals-with-directives}/answer/src/app/app.ts (100%) rename adev/src/content/tutorials/signals/steps/{7-using-signals-with-directives => 8-using-signals-with-directives}/answer/src/app/highlight-directive.ts (100%) rename adev/src/content/tutorials/signals/steps/{7-using-signals-with-directives => 8-using-signals-with-directives}/config.json (100%) rename adev/src/content/tutorials/signals/steps/{7-using-signals-with-directives => 8-using-signals-with-directives}/src/app/app.css (100%) rename adev/src/content/tutorials/signals/steps/{7-using-signals-with-directives => 8-using-signals-with-directives}/src/app/app.ts (100%) rename adev/src/content/tutorials/signals/steps/{7-using-signals-with-directives => 8-using-signals-with-directives}/src/app/highlight-directive.ts (100%) rename adev/src/content/tutorials/signals/steps/{8-query-child-elements-with-signal-queries => 9-query-child-elements-with-signal-queries}/README.md (76%) rename adev/src/content/tutorials/signals/steps/{8-query-child-elements-with-signal-queries => 9-query-child-elements-with-signal-queries}/answer/src/app/app.css (100%) rename adev/src/content/tutorials/signals/steps/{8-query-child-elements-with-signal-queries => 9-query-child-elements-with-signal-queries}/answer/src/app/app.ts (100%) rename adev/src/content/tutorials/signals/steps/{8-query-child-elements-with-signal-queries => 9-query-child-elements-with-signal-queries}/answer/src/app/cart-summary.ts (100%) rename adev/src/content/tutorials/signals/steps/{8-query-child-elements-with-signal-queries => 9-query-child-elements-with-signal-queries/answer}/src/app/product-card.ts (80%) rename adev/src/content/tutorials/signals/steps/{8-query-child-elements-with-signal-queries => 9-query-child-elements-with-signal-queries}/config.json (100%) rename adev/src/content/tutorials/signals/steps/{8-query-child-elements-with-signal-queries => 9-query-child-elements-with-signal-queries}/src/app/app.css (100%) rename adev/src/content/tutorials/signals/steps/{8-query-child-elements-with-signal-queries => 9-query-child-elements-with-signal-queries}/src/app/app.ts (100%) rename adev/src/content/tutorials/signals/steps/{8-query-child-elements-with-signal-queries => 9-query-child-elements-with-signal-queries}/src/app/cart-summary.ts (71%) rename adev/src/content/tutorials/signals/steps/{8-query-child-elements-with-signal-queries/answer => 9-query-child-elements-with-signal-queries}/src/app/product-card.ts (80%) diff --git a/adev/src/content/tutorials/signals/steps/1-creating-your-first-signal/README.md b/adev/src/content/tutorials/signals/steps/1-creating-your-first-signal/README.md index 1d626525703..cd2cf9372d8 100644 --- a/adev/src/content/tutorials/signals/steps/1-creating-your-first-signal/README.md +++ b/adev/src/content/tutorials/signals/steps/1-creating-your-first-signal/README.md @@ -8,9 +8,9 @@ In this activity, you'll learn how to: - Display its value in a template - Update the signal value using `set()` and `update()` methods -
+Let's build an interactive user status system with signals! -Let's build an interactive user status system with signals. +
@@ -38,18 +38,25 @@ export class App { -Update the template to display the current user status by calling the signal `userStatus()` with parentheses. +Update the status indicator to display the current user status by: +1. Binding the signal to the class attribute with `[class]="userStatus()"` +2. Displaying the status text by replacing `???` with `{{ userStatus() }}` ```html -