Bird
Raised Fist0
Angularframework~20 mins

Virtual scrolling for large lists in Angular - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Virtual Scroll Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
How does Angular's virtual scrolling improve performance?
Angular's CDK virtual scrolling renders only a subset of list items visible in the viewport. What is the main benefit of this approach?
AIt duplicates list items to fill the viewport faster.
BIt preloads all list items in the background to speed up scrolling.
CIt reduces memory and DOM nodes by rendering only visible items, improving scroll performance.
DIt disables scrolling until all items are rendered to avoid lag.
Attempts:
2 left
💡 Hint

Think about how rendering fewer elements affects browser speed.

📝 Syntax
intermediate
2:00remaining
Identify the correct syntax for using Angular CDK virtual scroll viewport
Which option shows the correct way to set up a virtual scroll viewport with a fixed item size of 50 pixels?
A<cdk-virtual-scroll-viewport [itemSize]="50">...</cdk-virtual-scroll-viewport>
B<cdk-virtual-scroll-viewport itemSize="50">...</cdk-virtual-scroll-viewport>
C<cdk-virtual-scroll-viewport item-size="50">...</cdk-virtual-scroll-viewport>
D<cdk-virtual-scroll-viewport [item-size]="50">...</cdk-virtual-scroll-viewport>
Attempts:
2 left
💡 Hint

Angular inputs use camelCase and square brackets for binding.

🔧 Debug
advanced
2:00remaining
Why does the virtual scroll viewport show blank space instead of items?
Given this Angular template snippet:
<cdk-virtual-scroll-viewport [itemSize]="50" class="viewport">
  <div *cdkVirtualFor="let item of items" class="item">{{item}}</div>
</cdk-virtual-scroll-viewport>

If the viewport shows empty space and no items, what is the most likely cause?
AThe items array is empty or undefined, so nothing renders.
BThe itemSize input is missing or set to zero, so viewport cannot calculate visible items.
CThe *cdkVirtualFor directive is misspelled, causing no rendering.
DThe viewport height is not set via CSS, so it collapses and hides items.
Attempts:
2 left
💡 Hint

Check if the container has a height to show scrollable content.

state_output
advanced
2:00remaining
What is the output when scrolling triggers an event in virtual scroll?
Consider this Angular component snippet:
items = Array.from({length: 1000}, (_, i) => `Item ${i+1}`);

onScrollIndexChange(index: number) {
  console.log('Start index:', index);
}

And the template:
<cdk-virtual-scroll-viewport [itemSize]="20" (scrolledIndexChange)="onScrollIndexChange($event)">
  <div *cdkVirtualFor="let item of items">{{item}}</div>
</cdk-virtual-scroll-viewport>

What will be logged when the user scrolls down the list?
AThe last visible item's index in the viewport after scrolling.
BThe index of the first visible item in the viewport as the user scrolls.
CThe total number of items in the list each time scrolling happens.
DThe scroll position in pixels from the top of the list.
Attempts:
2 left
💡 Hint

Check what the scrolledIndexChange event emits.

🧠 Conceptual
expert
3:00remaining
Why might virtual scrolling cause issues with dynamic item heights?
Virtual scrolling in Angular CDK assumes fixed item heights for calculations. What problem arises if list items have dynamic heights?
AThe viewport cannot correctly calculate scroll positions, causing visual glitches or incorrect item rendering.
BThe scroll bar disappears because the list height is fixed.
CDynamic heights improve performance by reducing DOM nodes automatically.
DThe virtual scroll automatically adjusts heights, so no issues occur.
Attempts:
2 left
💡 Hint

Think about how fixed size assumptions affect scrolling calculations.

Practice

(1/5)
1. What is the main benefit of using cdk-virtual-scroll-viewport in Angular for large lists?
easy
A. It renders only visible items to improve performance.
B. It automatically sorts the list items alphabetically.
C. It adds animations to list items when scrolling.
D. It duplicates list items for faster loading.

Solution

  1. Step 1: Understand virtual scrolling purpose

    Virtual scrolling aims to improve performance by rendering only the visible items in a large list.
  2. Step 2: Identify cdk-virtual-scroll-viewport role

    This Angular component implements virtual scrolling by showing only the items visible in the viewport, reducing DOM load.
  3. Final Answer:

    It renders only visible items to improve performance. -> Option A
  4. Quick Check:

    Virtual scrolling = render visible items only [OK]
Hint: Virtual scroll shows visible items only to boost speed [OK]
Common Mistakes:
  • Thinking it sorts or animates items
  • Assuming it duplicates items for speed
  • Confusing with pagination
2. Which of the following is the correct way to use virtual scrolling in Angular template?
easy
A. <cdk-virtual-scroll-viewport><div *cdkVirtualFor="let item in items">{{item}}</div></cdk-virtual-scroll-viewport>
B. <cdk-virtual-scroll-viewport itemSize="50"><div *ngFor="let item of items">{{item}}</div></cdk-virtual-scroll-viewport>
C. <cdk-virtual-scroll-viewport itemSize="50"><div *cdkVirtualFor="let item of items">{{item}}</div></cdk-virtual-scroll-viewport>
D. <cdk-virtual-scroll-viewport itemSize="50"><div *ngFor="let item in items">{{item}}</div></cdk-virtual-scroll-viewport>

Solution

  1. Step 1: Identify correct directive for virtual scroll

    Angular CDK virtual scroll requires *cdkVirtualFor instead of *ngFor to render visible items only.
  2. Step 2: Check syntax and itemSize usage

    The itemSize attribute is required on cdk-virtual-scroll-viewport to set fixed item height for scrolling calculations.
  3. Final Answer:

    <cdk-virtual-scroll-viewport itemSize="50"><div *cdkVirtualFor="let item of items">{{item}}</div></cdk-virtual-scroll-viewport> -> Option C
  4. Quick Check:

    Use *cdkVirtualFor with itemSize on viewport [OK]
Hint: Use *cdkVirtualFor, not *ngFor, inside cdk-virtual-scroll-viewport [OK]
Common Mistakes:
  • Using *ngFor instead of *cdkVirtualFor
  • Using 'let item in items' instead of 'of'
  • Omitting itemSize attribute
3. Given this Angular template snippet:
<cdk-virtual-scroll-viewport itemSize="40" style="height: 120px;">
  <div *cdkVirtualFor="let item of items">{{item}}</div>
</cdk-virtual-scroll-viewport>

and items = ['A', 'B', 'C', 'D', 'E'], how many items will be visible at once?
medium
A. 3 items
B. 5 items
C. 2 items
D. 4 items

Solution

  1. Step 1: Calculate viewport height in pixels

    The viewport height is set to 120px.
  2. Step 2: Divide viewport height by itemSize

    Each item is 40px tall, so 120px / 40px = 3 items visible at once.
  3. Final Answer:

    3 items -> Option A
  4. Quick Check:

    Visible items = viewport height / itemSize = 3 [OK]
Hint: Divide viewport height by itemSize to find visible items [OK]
Common Mistakes:
  • Counting all items instead of visible ones
  • Ignoring style height on viewport
  • Using wrong division operator
4. What is wrong with this Angular virtual scroll code?
<cdk-virtual-scroll-viewport itemSize="50">
  <div *cdkVirtualFor="let item in items">{{item}}</div>
</cdk-virtual-scroll-viewport>
medium
A. The *cdkVirtualFor directive must be on the viewport, not the div.
B. Missing style height on viewport causes no scroll.
C. itemSize must be a number, not a string.
D. Using *cdkVirtualFor with 'in' instead of 'of' causes an error.

Solution

  1. Step 1: Check syntax of *cdkVirtualFor directive

    The correct syntax uses 'of' to iterate over items, not 'in'. Using 'in' causes a template error.
  2. Step 2: Verify other attributes

    itemSize can be a string representing a number, and style height is recommended but not syntax error. The directive must be on the repeated element, not viewport.
  3. Final Answer:

    Using *cdkVirtualFor with 'in' instead of 'of' causes an error. -> Option D
  4. Quick Check:

    *cdkVirtualFor uses 'of', not 'in' [OK]
Hint: Use 'of' with *cdkVirtualFor, not 'in' [OK]
Common Mistakes:
  • Using 'in' instead of 'of' in *cdkVirtualFor
  • Forgetting to set viewport height
  • Placing directive on wrong element
5. You want to display a list of 10,000 items with virtual scrolling. Which combination of settings ensures smooth scrolling and correct rendering?
hard
A. Use *ngFor inside a scrollable div without cdk-virtual-scroll-viewport.
B. Use cdk-virtual-scroll-viewport with fixed itemSize, set viewport height, and use *cdkVirtualFor.
C. Use cdk-virtual-scroll-viewport with variable itemSize and *cdkVirtualFor.
D. Use cdk-virtual-scroll-viewport without itemSize, and *ngFor for rendering.

Solution

  1. Step 1: Understand virtual scroll requirements

    Virtual scrolling requires a fixed itemSize to calculate visible items and smooth scrolling.
  2. Step 2: Use correct directives and styles

    Use cdk-virtual-scroll-viewport with a fixed height and *cdkVirtualFor to render only visible items efficiently.
  3. Step 3: Avoid common pitfalls

    Not setting itemSize or using *ngFor causes performance issues or errors.
  4. Final Answer:

    Use cdk-virtual-scroll-viewport with fixed itemSize, set viewport height, and use *cdkVirtualFor. -> Option B
  5. Quick Check:

    Fixed itemSize + *cdkVirtualFor + viewport height = smooth scroll [OK]
Hint: Fixed itemSize and *cdkVirtualFor are key for smooth virtual scroll [OK]
Common Mistakes:
  • Omitting itemSize or viewport height
  • Using *ngFor instead of *cdkVirtualFor
  • Trying variable item sizes without special handling