Bird
Raised Fist0
Angularframework~10 mins

Signal creation and reading in Angular - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Signal creation and reading
Create signal with initial value
Signal holds current value
Read signal value anywhere
Use value in template or logic
If signal changes -> dependent code updates
This flow shows how a signal is created with a starting value, then read anywhere in the code or template, and how changes to the signal update dependent parts automatically.
Execution Sample
Angular
import { signal } from '@angular/core';

const count = signal(0);

console.log(count());
count.set(5);
console.log(count());
This code creates a signal with 0, reads and logs it, updates it to 5, then reads and logs the new value.
Execution Table
StepActionSignal Value BeforeOperationSignal Value AfterOutput
1Create signal with 0N/Asignal(0)0No output
2Read signal value0count()00
3Update signal value0count.set(5)5No output
4Read updated signal value5count()55
5End of code5N/A5Execution stops
💡 Signal value is 5, no more code to execute
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
countN/A00555
Key Moments - 2 Insights
Why do we call count() to read the signal value instead of just using count?
Signals in Angular are functions. Calling count() executes the function to get the current value. See execution_table rows 2 and 4 where count() returns the value.
What happens when we use count.set(5)? Does it change the variable directly?
No, count.set(5) updates the internal value inside the signal. The variable count remains a function. This is shown in execution_table row 3 where the value changes from 0 to 5.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output at step 4 when reading the signal?
A5
B0
Cundefined
DError
💡 Hint
Check the Output column at step 4 in the execution_table
At which step does the signal value change from 0 to 5?
AStep 2
BStep 4
CStep 3
DStep 1
💡 Hint
Look at Signal Value After column in execution_table rows 2 and 3
If we forget to call count() and just log count, what would happen?
AIt logs the current value
BIt logs the signal function itself
CIt throws an error
DIt logs undefined
💡 Hint
Signals are functions, so logging count without () logs the function, not the value
Concept Snapshot
Signal creation and reading in Angular:
- Use signal(initialValue) to create a signal.
- Signals are functions; call them like count() to read value.
- Use count.set(newValue) to update the signal.
- Reading a signal triggers reactive updates.
- Signals hold state and notify dependents on change.
Full Transcript
In Angular, a signal is created by calling signal() with an initial value. This returns a function that holds the current value. To read the value, you call the signal function like count(). To update the value, you use count.set(newValue). When the signal changes, Angular automatically updates any code or template parts that depend on it. This example shows creating a signal with 0, reading it, updating to 5, and reading again. The key is remembering signals are functions, so you must call them to get the value.

Practice

(1/5)
1. What does the signal function do in Angular?
easy
A. Registers a service for dependency injection
B. Defines a new Angular component
C. Creates a reactive value that can be read and updated
D. Starts an HTTP request

Solution

  1. Step 1: Understand the purpose of signal

    The signal function is used to create reactive values that Angular tracks for changes.
  2. Step 2: Identify what signal does

    It creates a value container that can be read by calling it and updated to trigger UI changes.
  3. Final Answer:

    Creates a reactive value that can be read and updated -> Option C
  4. Quick Check:

    Signal creation = reactive value container [OK]
Hint: Remember: signal() creates reactive values you can read and update [OK]
Common Mistakes:
  • Confusing signal with component or service creation
  • Thinking signal starts HTTP requests
  • Assuming signal is for styling or templates
2. Which of the following is the correct way to create a signal with initial value 10?
easy
A. const count = signal(10);
B. const count = Signal(10);
C. const count = signal = 10;
D. const count = signal.create(10);

Solution

  1. Step 1: Check the correct syntax for signal creation

    The correct syntax uses lowercase signal as a function with the initial value in parentheses.
  2. Step 2: Compare options

    const count = signal(10); matches the correct syntax: const count = signal(10);. Others use wrong casing or invalid syntax.
  3. Final Answer:

    const count = signal(10); -> Option A
  4. Quick Check:

    signal() function call with initial value [OK]
Hint: Use lowercase signal() with parentheses for initial value [OK]
Common Mistakes:
  • Using uppercase Signal instead of signal
  • Assigning signal = 10 instead of calling signal(10)
  • Trying to call a create method on signal
3. Given this code:
const count = signal(5);
console.log(count());
count.set(10);
console.log(count());

What will be printed in the console?
medium
A. 5 then 10
B. 5 then 5
C. 10 then 10
D. Error because set() is not a function

Solution

  1. Step 1: Read the initial signal value

    The signal count is created with initial value 5, so count() returns 5.
  2. Step 2: Update the signal and read again

    Calling count.set(10) updates the value to 10, so the next count() returns 10.
  3. Final Answer:

    5 then 10 -> Option A
  4. Quick Check:

    Signal read before and after set() = 5, 10 [OK]
Hint: Remember: signal() reads, set() updates value [OK]
Common Mistakes:
  • Thinking count() returns the same value after set()
  • Assuming set() is not a valid method
  • Confusing signal reading with direct variable access
4. Identify the error in this code snippet:
const name = signal('Alice');
console.log(name);
name('Bob');
medium
A. Cannot call signal variable as a function
B. Missing parentheses when reading signal value
C. Cannot assign new value by calling signal as function
D. Signal must be updated using name.set('Bob')

Solution

  1. Step 1: Check how signal values are read and updated

    Signals are read by calling them as functions: name(). To update, use name.set(newValue).
  2. Step 2: Identify the error in updating

    The code tries to update the signal by calling name('Bob'), which is invalid. The correct way is name.set('Bob').
  3. Final Answer:

    Signal must be updated using name.set('Bob') -> Option D
  4. Quick Check:

    Update signals with set() method [OK]
Hint: Use set() to update signals, not calling them as functions [OK]
Common Mistakes:
  • Trying to update signal by calling it as a function
  • Forgetting parentheses when reading signal value
  • Confusing signal with normal variables
5. You want to create a signal that holds a list of numbers and update it by adding a new number. Which code correctly updates the signal to add 4 to the list?
const numbers = signal([1, 2, 3]);
// Add 4 to numbers here
hard
A. numbers([...numbers(), 4]);
B. numbers.set([...numbers(), 4]);
C. numbers.value.push(4);
D. numbers = [...numbers(), 4];

Solution

  1. Step 1: Understand how to read and update signals

    Read the current value by calling numbers(). To update, use numbers.set(newValue).
  2. Step 2: Add 4 to the existing array immutably

    Create a new array with existing values plus 4: [...numbers(), 4]. Then update signal with numbers.set([...numbers(), 4]).
  3. Final Answer:

    numbers.set([...numbers(), 4]); -> Option B
  4. Quick Check:

    Update signal immutably with set([...signal(), newItem]) [OK]
Hint: Use set() with new array copy to update list signals [OK]
Common Mistakes:
  • Trying to call signal as a function to update
  • Mutating array directly without set()
  • Assigning new array to signal variable directly