@@ -136,11 +136,6 @@ export function runEnterAnimation(
136136
137137 // We only need to add these event listeners if there are actual classes to apply
138138 if ( activeClasses && activeClasses . length > 0 ) {
139- let isCleanedUp = false ;
140- cleanupFns . push ( ( ) => {
141- isCleanedUp = true ;
142- } ) ;
143-
144139 ngZone . runOutsideAngular ( ( ) => {
145140 cleanupFns . push ( renderer . listen ( nativeElement , 'animationstart' , handleEnterAnimationStart ) ) ;
146141 cleanupFns . push ( renderer . listen ( nativeElement , 'transitionstart' , handleEnterAnimationStart ) ) ;
@@ -157,16 +152,14 @@ export function runEnterAnimation(
157152 // preventing an animation via selector specificity.
158153 ngZone . runOutsideAngular ( ( ) => {
159154 requestAnimationFrame ( ( ) => {
160- setTimeout ( ( ) => {
161- if ( hasCompleted || isCleanedUp ) return ;
162- determineLongestAnimation ( nativeElement , longestAnimations , areAnimationSupported ) ;
163- if ( ! longestAnimations . has ( nativeElement ) ) {
164- for ( const klass of activeClasses ) {
165- renderer . removeClass ( nativeElement , klass ) ;
166- }
167- cleanupEnterClassData ( nativeElement ) ;
155+ if ( hasCompleted ) return ;
156+ determineLongestAnimation ( nativeElement , longestAnimations , areAnimationSupported ) ;
157+ if ( ! longestAnimations . has ( nativeElement ) ) {
158+ for ( const klass of activeClasses ) {
159+ renderer . removeClass ( nativeElement , klass ) ;
168160 }
169- } ) ;
161+ cleanupEnterClassData ( nativeElement ) ;
162+ }
170163 } ) ;
171164 } ) ;
172165 }
@@ -333,14 +326,6 @@ function animateLeaveClassRunner(
333326 const componentResolvers = getLViewLeaveAnimations ( lView ) . get ( tNode . index ) ?. resolvers ;
334327 let fallbackTimeoutId : number | undefined ;
335328 let hasCompleted = false ;
336- let isCleanedUp = false ;
337-
338- cleanupFns . push ( ( ) => {
339- isCleanedUp = true ;
340- if ( fallbackTimeoutId !== undefined ) {
341- clearTimeout ( fallbackTimeoutId ) ;
342- }
343- } ) ;
344329
345330 const handleOutAnimationEnd = ( event : AnimationEvent | TransitionEvent | CustomEvent ) => {
346331 const target = getEventTarget ( event as Event ) ;
@@ -393,22 +378,21 @@ function animateLeaveClassRunner(
393378 // preventing an animation via selector specificity.
394379 ngZone . runOutsideAngular ( ( ) => {
395380 requestAnimationFrame ( ( ) => {
396- setTimeout ( ( ) => {
397- if ( hasCompleted || isCleanedUp ) return ;
398- determineLongestAnimation ( el , longestAnimations , areAnimationSupported ) ;
399- const longest = longestAnimations . get ( el ) ;
400- if ( ! longest ) {
401- clearLeavingNodes ( tNode , el ) ;
402- cleanupAfterLeaveAnimations ( componentResolvers , cleanupFns ) ;
403- clearLViewNodeAnimationResolvers ( lView , tNode ) ;
404- } else {
405- // Fallback cleanup if the browser drops the transitionend/animationend event
406- // entirely due to off-screen optimizations or rapid DOM teardown.
407- fallbackTimeoutId = setTimeout ( ( ) => {
408- handleOutAnimationEnd ( new CustomEvent ( 'animation-fallback' ) ) ;
409- } , longest . duration + 50 ) as unknown as number ;
410- }
411- } ) ;
381+ if ( hasCompleted ) return ;
382+ determineLongestAnimation ( el , longestAnimations , areAnimationSupported ) ;
383+ const longest = longestAnimations . get ( el ) ;
384+ if ( ! longest ) {
385+ clearLeavingNodes ( tNode , el ) ;
386+ cleanupAfterLeaveAnimations ( componentResolvers , cleanupFns ) ;
387+ clearLViewNodeAnimationResolvers ( lView , tNode ) ;
388+ } else {
389+ // Fallback cleanup if the browser drops the transitionend/animationend event
390+ // entirely due to off-screen optimizations or rapid DOM teardown.
391+ fallbackTimeoutId = setTimeout ( ( ) => {
392+ handleOutAnimationEnd ( new CustomEvent ( 'animation-fallback' ) ) ;
393+ } , longest . duration + 50 ) as unknown as number ;
394+ cleanupFns . push ( ( ) => clearTimeout ( fallbackTimeoutId ) ) ;
395+ }
412396 } ) ;
413397 } ) ;
414398}
0 commit comments