{"record":{"id":"1ccc0612d611582d","repo":"angular/components","slug":"cdk-virtual-scroll-scrolledindexchange-is-current","errorCode":null,"errorMessage":"cdk-virtual-scroll: scrolledIndexChange is currently not supported for the autosize scroll strategy","messagePattern":"cdk-virtual-scroll: scrolledIndexChange is currently not supported for the autosize scroll strategy","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/cdk-experimental/scrolling/auto-size-virtual-scroll.ts","lineNumber":74,"sourceCode":"        this._totalWeight = newTotalWeight;\n      }\n    }\n  }\n\n  /** Resets the averager. */\n  reset() {\n    this._averageItemSize = this._defaultItemSize;\n    this._totalWeight = 0;\n  }\n}\n\n/** Virtual scrolling strategy for lists with items of unknown or dynamic size. */\nexport class AutoSizeVirtualScrollStrategy implements VirtualScrollStrategy {\n  /** @docs-private Implemented as part of VirtualScrollStrategy. */\n  scrolledIndexChange = new Observable<number>(() => {\n    // TODO(mmalerba): Implement.\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      throw Error(\n        'cdk-virtual-scroll: scrolledIndexChange is currently not supported for the' +\n          ' autosize scroll strategy',\n      );\n    }\n  });\n\n  /** The attached viewport. */\n  private _viewport: CdkVirtualScrollViewport | null = null;\n\n  /** The minimum amount of buffer rendered beyond the viewport (in pixels). */\n  private _minBufferPx: number;\n\n  /** The number of buffer items to render beyond the edge of the viewport (in pixels). */\n  private _maxBufferPx: number;\n\n  /** The estimator used to estimate the size of unseen items. */\n  private _averager: ItemSizeAverager;\n","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/angular/components/blob/0411926e7d8ae06b32236ec1048a888cfad5abf2/src/cdk-experimental/scrolling/auto-size-virtual-scroll.ts#L56-L92","documentation":"The experimental AutoSizeVirtualScrollStrategy does not implement the scrolledIndexChange observable of the VirtualScrollStrategy interface. Subscribing to it throws this error in dev mode (ngDevMode builds only; production silently yields). It is a deliberately unimplemented experimental feature marked with a TODO.","triggerScenarios":"Subscribing to the `scrolledIndexChange` output/event of CdkVirtualScrollViewport when it is configured with the experimental autosize strategy (cdk-virtual-scroll-auto-size / AutoSizeVirtualScrollStrategy) in a development build.","commonSituations":"Developers tracking the user's scroll position or loading more data on scroll while using the autosize experimental strategy; migrating code that worked with FixedSizeVirtualScrollStrategy or ItemSizeAllStrategy to autosize; using angular/cdk-experimental scrolling in dev mode.","solutions":["Track scroll position yourself via CdkVirtualScrollViewport's element scroll events or the viewport.checkViewportSize()/renderedRangeStream instead of scrolledIndexChange.","Use a non-experimental strategy (FixedSizeVirtualScrollStrategy via itemSize, or the variable-size strategy with minBufferPx/maxBufferPx) if you need scrolledIndexChange.","Wait for the feature: it is an unimplemented TODO in the experimental package; avoid relying on it."],"exampleFix":"// before\nviewport.scrolledIndexChange.subscribe(i => this.loadMore(i)); // throws with autosize\n// after\nfromEvent(viewport.elementRef.nativeElement, 'scroll')\n  .subscribe(() => this.loadMore(viewport.measureScrollOffset()));","handlingStrategy":"validation","validationCode":"if (viewport.strategy instanceof AutoSizeVirtualScrollStrategy) {\n  // don't subscribe to scrolledIndexChange — fall back to native scroll events\n}","typeGuard":null,"tryCatchPattern":"try {\n  viewport.scrolledIndexChange.subscribe(onScrollIndex);\n} catch {\n  // autosize strategy: use native element scroll events instead\n  fromEvent(viewport.elementRef.nativeElement, 'scroll').subscribe(onNativeScroll);\n}","preventionTips":["Check the experimental autosize strategy's docs/TODOs before using its VirtualScrollStrategy API surface.","Use renderedRangeStream or native scroll events as portable alternatives.","Gate strategy-dependent code behind a check of which strategy is active."],"tags":["angular","cdk","virtual-scroll","experimental","unsupported-feature"],"backgroundTag":"unimplemented-experimental-api","analyzedSha":"0411926e7d8ae06b32236ec1048a888cfad5abf2","analyzedAt":"2026-08-31T11:58:23.400Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}