Skip to content

Commit a2e41c3

Browse files
committed
refactor(overlay): use key event dispatcher for CdkConnectedOverlay
Switched the `CdkConnectedOverlay` directive to use the key event dispatcher rather than listening to events on the document.
1 parent 27dfd15 commit a2e41c3

File tree

2 files changed

+7
-12
lines changed

2 files changed

+7
-12
lines changed

src/cdk/overlay/overlay-directives.spec.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ describe('Overlay directives', () => {
110110
fixture.componentInstance.isOpen = true;
111111
fixture.detectChanges();
112112

113-
dispatchKeyboardEvent(document, 'keydown', ESCAPE);
113+
dispatchKeyboardEvent(document.body, 'keydown', ESCAPE);
114114
fixture.detectChanges();
115115

116116
expect(overlayContainerElement.textContent!.trim()).toBe('',
@@ -342,4 +342,3 @@ class ConnectedOverlayPropertyInitOrder {
342342
@ViewChild(CdkConnectedOverlay) connectedOverlayDirective: CdkConnectedOverlay;
343343
@ViewChild('trigger') trigger: CdkOverlayOrigin;
344344
}
345-

src/cdk/overlay/overlay-directives.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -330,11 +330,16 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
330330
private _attachOverlay() {
331331
if (!this._overlayRef) {
332332
this._createOverlay();
333+
334+
this._overlayRef!.keydownEvents().subscribe((event: KeyboardEvent) => {
335+
if (event.keyCode === ESCAPE) {
336+
this._detachOverlay();
337+
}
338+
});
333339
}
334340

335341
this._position.withDirection(this.dir);
336342
this._overlayRef.setDirection(this.dir);
337-
this._document.addEventListener('keydown', this._escapeListener);
338343

339344
if (!this._overlayRef.hasAttached()) {
340345
this._overlayRef.attach(this._templatePortal);
@@ -356,7 +361,6 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
356361
}
357362

358363
this._backdropSubscription.unsubscribe();
359-
this._document.removeEventListener('keydown', this._escapeListener);
360364
}
361365

362366
/** Destroys the overlay created by this directive. */
@@ -367,13 +371,5 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
367371

368372
this._backdropSubscription.unsubscribe();
369373
this._positionSubscription.unsubscribe();
370-
this._document.removeEventListener('keydown', this._escapeListener);
371-
}
372-
373-
/** Event listener that will close the overlay when the user presses escape. */
374-
private _escapeListener = (event: KeyboardEvent) => {
375-
if (event.keyCode === ESCAPE) {
376-
this._detachOverlay();
377-
}
378374
}
379375
}

0 commit comments

Comments
 (0)