Lists and their rowsbeginner
A list component owns the collection and a row component owns one item, and the empty case is a state to render rather than a blank space where a table should be.
The same table as the React sprint. One component owns the list, another owns a row, and the empty case is a real state rather than a blank table.
The table is built from Row components and an empty list says so in a sentence.
Published in full, before you start — every point is one of these and there is nothing else.
A list component owns the collection and a row component owns one item, and the empty case is a state to render rather than a blank space where a table should be.
The @if and @for blocks replaced *ngIf and *ngFor, and the track expression is what stops Angular rebuilding every row when one of them changes.
Standalone components declare what they need instead of belonging to an NgModule, and inject() gets a dependency without a constructor parameter — together they are most of what changed in modern Angular.