Lifting state upintermediate
When two components must always agree, neither of them can own the value — it moves to the lowest component containing both, and comes back down as props.
A search box, a count and a list that must always agree. Angular has an answer React does not: the change comes back up as an output, not as a callback prop.
One writable signal, held above all three, and the count always matches the list.
Published in full, before you start — every point is one of these and there is nothing else.
When two components must always agree, neither of them can own the value — it moves to the lowest component containing both, and comes back down as props.
A component receives everything it needs as props and renders it — which is what lets the same card show a laptop on one page and a desk on another without being rewritten.
A signal is a value that tells the template when it changed, so Angular updates only what actually depends on it — and computed() derives from other signals rather than storing a second copy that can drift.