Performance: ngClass for dynamic classes
This affects rendering speed and visual stability by dynamically adding or removing CSS classes on elements.
<!-- Template --> <div [ngClass]="currentClass"></div> // Component currentClass = 'active highlight'; // Update currentClass string only when needed, minimizing changes
<!-- Template --> <div [ngClass]="{'active': isActive, 'highlight': isHighlighted}"></div> // Component isActive = true; isHighlighted = true; // In frequent change scenario, toggling both frequently
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Frequent toggling of multiple classes separately | Multiple class attribute updates | Multiple reflows per toggle | High paint cost due to layout shifts | [X] Bad |
| Batch updating classes as a single string | Single class attribute update | Single reflow per update | Lower paint cost with stable layout | [OK] Good |
ngClass in Angular?ngClass doesngClass is used to control CSS classes dynamically in Angular templates.ngClass purposengClass functionality.ngClass with an array?<div [ngClass]="['class1', 'class2']"></div> correctly uses [ngClass] with an array. <div ngClass="class1 class2"></div> is plain string without binding. <div [ngClass]="{'class1': true, 'class2': false}"></div> uses object syntax, not array. <div [ngClass]="class1, class2"></div> is invalid syntax.isActive = true;
classes = { 'active': isActive, 'disabled': !isActive };<div [ngClass]="classes">Content</div><div [ngClass]="{active: isActive, disabled: !isActive}">Test</div>isActive is a boolean property in the component.score is above 80 and 'low-score' when it is below or equal to 80. Which ngClass binding correctly implements this logic?<div [ngClass]="{highlight: score > 80, 'low-score': score <= 80}"></div> correctly maps conditions to classes in an object. <div ngClass="score > 80 ? 'highlight' : 'low-score'"></div> lacks property binding [ngClass], so the ternary is not evaluated (static string). <div [ngClass]="['highlight', 'low-score']"></div> applies both classes always. <div [ngClass]="{highlight: score <= 80, 'low-score': score > 80}"></div> reverses conditions incorrectly.Pass the test and this pattern moves unknown