@@ -41,6 +41,7 @@ import {startWith} from 'rxjs/operators/startWith';
41
41
import { takeUntil } from 'rxjs/operators/takeUntil' ;
42
42
import { debounceTime } from 'rxjs/operators/debounceTime' ;
43
43
import { map } from 'rxjs/operators/map' ;
44
+ import { fromEvent } from 'rxjs/observable/fromEvent' ;
44
45
import { Subject } from 'rxjs/Subject' ;
45
46
import { Observable } from 'rxjs/Observable' ;
46
47
import { matDrawerAnimations } from './drawer-animations' ;
@@ -119,7 +120,6 @@ export class MatDrawerContent implements AfterContentInit {
119
120
'[@transform]' : '_animationState' ,
120
121
'(@transform.start)' : '_onAnimationStart($event)' ,
121
122
'(@transform.done)' : '_onAnimationEnd($event)' ,
122
- '(keydown)' : 'handleKeydown($event)' ,
123
123
// must prevent the browser from aligning text based on value
124
124
'[attr.align]' : 'null' ,
125
125
'[class.mat-drawer-end]' : 'position === "end"' ,
@@ -258,6 +258,7 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr
258
258
private _focusTrapFactory : FocusTrapFactory ,
259
259
private _focusMonitor : FocusMonitor ,
260
260
private _platform : Platform ,
261
+ private _ngZone : NgZone ,
261
262
@Optional ( ) @Inject ( DOCUMENT ) private _doc : any ) {
262
263
263
264
this . openedChange . subscribe ( ( opened : boolean ) => {
@@ -273,6 +274,16 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr
273
274
this . _restoreFocus ( ) ;
274
275
}
275
276
} ) ;
277
+
278
+ // Handles the ESCAPE keyboard event
279
+ this . _ngZone . runOutsideAngular ( ( ) => {
280
+ fromEvent ( this . _elementRef . nativeElement , 'keydown' ) . pipe (
281
+ filter ( ( event : KeyboardEvent ) => event . keyCode === ESCAPE && ! this . disableClose )
282
+ ) . subscribe ( ( event ) => this . _ngZone . run ( ( ) => {
283
+ this . close ( ) ;
284
+ event . stopPropagation ( ) ;
285
+ } ) ) ;
286
+ } ) ;
276
287
}
277
288
278
289
/** Traps focus inside the drawer. */
@@ -382,17 +393,6 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr
382
393
} ) ;
383
394
}
384
395
385
- /**
386
- * Handles the keyboard events.
387
- * @docs -private
388
- */
389
- handleKeydown ( event : KeyboardEvent ) : void {
390
- if ( event . keyCode === ESCAPE && ! this . disableClose ) {
391
- this . close ( ) ;
392
- event . stopPropagation ( ) ;
393
- }
394
- }
395
-
396
396
_onAnimationStart ( event : AnimationEvent ) {
397
397
this . _animationStarted . emit ( event ) ;
398
398
}
0 commit comments