@@ -92,7 +92,9 @@ export class OverlayRef implements PortalHost {
9292
9393 // Add class to fade-in the backdrop after one frame.
9494 requestAnimationFrame ( ( ) => {
95- this . _backdropElement . classList . add ( 'md-overlay-backdrop-showing' ) ;
95+ if ( this . _backdropElement ) {
96+ this . _backdropElement . classList . add ( 'md-overlay-backdrop-showing' ) ;
97+ }
9698 } ) ;
9799 }
98100
@@ -101,18 +103,29 @@ export class OverlayRef implements PortalHost {
101103 let backdropToDetach = this . _backdropElement ;
102104
103105 if ( backdropToDetach ) {
106+ let onTransitionEnd = ( ) => {
107+ if ( backdropToDetach ) {
108+ if ( backdropToDetach . parentNode ) {
109+ backdropToDetach . parentNode . removeChild ( backdropToDetach ) ;
110+ }
111+
112+ // It is possible that a new portal has been attached to this overlay since we started
113+ // removing the backdrop. If that is the case, only clear the backdrop reference if it
114+ // is still the same instance that we started to remove.
115+ if ( this . _backdropElement == backdropToDetach ) {
116+ this . _backdropElement = null ;
117+ }
118+ }
119+ } ;
120+
104121 backdropToDetach . classList . remove ( 'md-overlay-backdrop-showing' ) ;
105122 backdropToDetach . classList . remove ( this . _state . backdropClass ) ;
106- backdropToDetach . addEventListener ( 'transitionend' , ( ) => {
107- backdropToDetach . parentNode . removeChild ( backdropToDetach ) ;
108-
109- // It is possible that a new portal has been attached to this overlay since we started
110- // removing the backdrop. If that is the case, only clear the backdrop reference if it
111- // is still the same instance that we started to remove.
112- if ( this . _backdropElement == backdropToDetach ) {
113- this . _backdropElement = null ;
114- }
115- } ) ;
123+ backdropToDetach . addEventListener ( 'transitionend' , onTransitionEnd ) ;
124+
125+ // If the backdrop doesn't have a transition, the `transitionend` event won't fire.
126+ // In this case we make it unclickable and we try to remove it after a delay.
127+ backdropToDetach . style . pointerEvents = 'none' ;
128+ setTimeout ( onTransitionEnd , 500 ) ;
116129 }
117130 }
118131}
0 commit comments