@@ -114,19 +114,6 @@ export class DialogDirective implements OnInit, OnDestroy, OnChanges {
114114 this . toggle ( ) ;
115115 }
116116
117- @HostListener ( "keydown" , [ "$event" ] )
118- onKeydown ( event : KeyboardEvent ) {
119- if ( this . trigger === "click" && ( event . key === "Enter" || event . key === " " ) ) {
120- this . open ( ) ;
121- }
122- if ( event . key === "Escape" ) {
123- this . close ( ) ;
124- }
125- if ( event . target === this . dialogConfig . parentRef . nativeElement && ( event . key === "Tab" || event . key === "Tab" && event . shiftKey ) ) {
126- this . close ( ) ;
127- }
128- }
129-
130117 ngOnChanges ( ) {
131118 // set the config object (this can [and should!] be added to in child classes depending on what they need)
132119 this . dialogConfig = {
@@ -150,6 +137,14 @@ export class DialogDirective implements OnInit, OnDestroy, OnChanges {
150137 // fix for safari hijacking clicks
151138 this . dialogService . singletonClickListen ( ) ;
152139
140+ fromEvent ( this . elementRef . nativeElement , "keydown" ) . subscribe ( ( event : KeyboardEvent ) => {
141+ // "Esc" is an IE specific value
142+ if ( event . target === this . dialogConfig . parentRef . nativeElement && ( event . key === "Tab" || event . key === "Tab" && event . shiftKey ) ||
143+ event . key === "Escape" || event . key === "Esc" ) {
144+ this . close ( ) ;
145+ }
146+ } ) ;
147+
153148 // bind events for hovering or clicking the host
154149 if ( this . trigger === "hover" || this . trigger === "mouseenter" ) {
155150 fromEvent ( this . elementRef . nativeElement , "mouseenter" ) . subscribe ( ( ) => this . toggle ( ) ) ;
@@ -158,6 +153,12 @@ export class DialogDirective implements OnInit, OnDestroy, OnChanges {
158153 fromEvent ( this . elementRef . nativeElement , "blur" ) . subscribe ( ( ) => this . close ( ) ) ;
159154 } else {
160155 fromEvent ( this . elementRef . nativeElement , "click" ) . subscribe ( ( ) => this . toggle ( ) ) ;
156+ fromEvent ( this . elementRef . nativeElement , "keydown" ) . subscribe ( ( event : KeyboardEvent ) => {
157+ // "Spacebar" is an IE specific value
158+ if ( event . key === "Enter" || event . key === " " || event . key === "Spacebar" ) {
159+ this . open ( ) ;
160+ }
161+ } ) ;
161162 }
162163
163164 // call onClose when the dialog is closed
0 commit comments