Angular signals are reactive values that let Angular track where state is read and update affected parts of an application when that state changes. Start with signal() for writable state, use computed() for derived values, and reserve effect() for synchronizing with imperative systems such as storage or third-party APIs.
What Angular signals do
A signal wraps a value. Reading it means calling it like a function; Angular can track that read as a dependency and respond when the value changes. This dependency tracking helps Angular target rendering updates, but signals do not eliminate change detection or guarantee that every application will be faster. See the Angular Signals overview.
For example, a component can keep a count as writable state and derive a display value from it:
import { computed, signal } from '@angular/core';
const count = signal(0);
const doubled = computed(() => count() * 2);
count.set(1);
count.update(value => value + 1);
console.log(count()); // 2
console.log(doubled()); // 4
count() reads the current value. .set(value) replaces it, while .update(fn) calculates a replacement from the current value. The function-call syntax applies to reads; it is not property access such as count.value.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Choose the signal API that matches the job
| Need | Use | What it means |
|---|---|---|
| Writable source state | signal(initialValue) |
Read by calling the signal; update with .set() or .update(). |
| A value derived from other signals | computed(() => ...) |
Read-only, lazy, memoized, and dependent on the signals read during its latest evaluation. |
| Derived state that must also be manually adjustable | linkedSignal() |
Maintains a value related to other state while allowing that value to be set manually. |
| Synchronization with a non-signal, imperative system | effect(() => ...) |
Runs in response to the signals it reads; register cleanup for work that must stop before a rerun or destruction. |
| General asynchronous work | resource() |
Loads using reactive parameters and exposes readable data and status. |
| Reactive HTTP requests through Angular’s HttpClient | httpResource() |
HTTP-oriented resource that uses the HttpClient stack and supports its features, including interceptors. |
Derive values with computed()
Use computed() when a value can be calculated from other signals and should not be independently written. Angular evaluates a computed value lazily, caches its result, and recalculates it when a dependency changes. Its dependencies are dynamic: if the calculation reads signals inside a conditional branch, only the signals read in the latest evaluation are dependencies. A change in the selected branch can therefore add or remove dependencies.
For example, a filtered list or a total based on a cart’s item signals generally belongs in a computed value, rather than in a separate writable signal kept in sync by an effect. That keeps the source state and its derivation distinct.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Use linkedSignal() for dependent state that users can change
Sometimes a value depends on other state but also needs to be changed directly. In that case, linkedSignal() is a better fit than either a read-only computed value or an effect that copies data between signals. Angular’s guidance distinguishes it from computed() on this basis: computed values are derived and read-only, while linked signals support derived state that can also be manually set. See the effects guide for Angular’s recommendation.
Use effects for imperative side effects—not state propagation
An effect is appropriate when a signal change must be synchronized with something outside the signal graph, such as logging, browser storage, custom DOM work, or a third-party rendering library. Effects track signal reads dynamically and execute asynchronously as part of Angular’s change-detection process. They support cleanup before they rerun or when their owning context is destroyed.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
Do not use an effect as the usual way to copy one signal into another or to maintain a derived value. Angular warns that propagating state through effects can cause ExpressionChangedAfterItHasBeenChecked errors, circular updates, and unnecessary change-detection cycles. Prefer a single source of truth and derive the dependent value with computed(), or use linkedSignal() when the dependent value must also be manually adjustable. Angular’s tutorial summarizes the rule in its signal effects tutorial.
Effects created in a component, directive, or service are associated with that context by default. Creating one outside an injection context requires providing an injector. If DOM work must happen after Angular has finished rendering and committed changes, Angular provides afterRenderEffect() for that timing.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Load asynchronous data with resources
Use resource() when asynchronous work should respond to reactive parameters. It accepts parameters and an async loader, then exposes data and status as signals so a template can represent loading, success, and failure states. The resource guide describes this API and its status model.
For requests that should use Angular’s HTTP infrastructure, httpResource() is the HTTP-oriented alternative. It uses the HttpClient stack, exposes response and status as signals, and supports HttpClient features such as interceptors. See the httpResource guide.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
One server-rendering caution matters for resources: do not serialize user-specific resource data into HTML that could be cached or shared with another user. Keep the data and the caching boundary appropriate to the user-specific nature of the response.
Use signals in component inputs
Angular’s input() API returns a read-only signal for an input received by a component. Angular recommends it for new projects; decorator-based @Input remains supported. Use model() when the component can write a value and propagate it back to a parent through two-way binding. These APIs cover different ownership needs: input state is read-only to the receiving component, while a model supports component writes. Details are in Angular’s signals inputs guide.
Signal reads in templates and object updates
When an OnPush component template reads a signal, Angular tracks that dependency and marks the component for update when the signal changes. This is targeted update behavior, not a promise that signals remove change detection altogether. The tracking model and rendering behavior are described in the Signals overview.
A read-only signal prevents callers from using its signal API to assign a new value; it does not prevent deep mutation of an object held by that signal. Prefer immutable replacement or update patterns for arrays and objects so that changes are explicit and observable. For instance, create a new array when adding an item rather than mutating the existing array in place.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Stability and version context
Angular’s v20 roadmap records that the fundamental reactivity primitives—including signal, effect, linkedSignal, signal-based queries, and inputs—graduated to stable in v20, with the milestone marked completed in Q2 2025. That is a dated v20 stability milestone, not evidence that v20 is the latest Angular release. See the Angular v20 roadmap.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

