diff --git a/src/cdk/a11y/key-manager/list-key-manager.spec.ts b/src/cdk/a11y/key-manager/list-key-manager.spec.ts index a937d187d21..4bbc026b87a 100644 --- a/src/cdk/a11y/key-manager/list-key-manager.spec.ts +++ b/src/cdk/a11y/key-manager/list-key-manager.spec.ts @@ -93,6 +93,15 @@ describe('Key managers', () => { expect(keyManager.activeItem!.getLabel()).toBe('one'); }); + it('should start off the activeItem as null', () => { + expect(new ListKeyManager([]).activeItem).toBeNull(); + }); + + it('should set the activeItem to null if an invalid index is passed in', () => { + keyManager.setActiveItem(1337); + expect(keyManager.activeItem).toBeNull(); + }); + describe('Key events', () => { it('should emit tabOut when the tab key is pressed', () => { diff --git a/src/cdk/a11y/key-manager/list-key-manager.ts b/src/cdk/a11y/key-manager/list-key-manager.ts index 98e2ad4348f..9b6bf2d04dc 100644 --- a/src/cdk/a11y/key-manager/list-key-manager.ts +++ b/src/cdk/a11y/key-manager/list-key-manager.ts @@ -40,7 +40,7 @@ export type ListKeyManagerModifierKey = 'altKey' | 'ctrlKey' | 'metaKey' | 'shif */ export class ListKeyManager { private _activeItemIndex = -1; - private _activeItem: T; + private _activeItem: T | null = null; private _wrap = false; private _letterKeyStream = new Subject(); private _typeaheadSubscription = Subscription.EMPTY; @@ -310,9 +310,11 @@ export class ListKeyManager { updateActiveItem(item: any): void { const itemArray = this._getItemsArray(); const index = typeof item === 'number' ? item : itemArray.indexOf(item); + const activeItem = itemArray[index]; + // Explicitly check for `null` and `undefined` because other falsy values are valid. + this._activeItem = activeItem == null ? null : activeItem; this._activeItemIndex = index; - this._activeItem = itemArray[index]; } /**