@@ -203,13 +203,16 @@ angular.module('unsavedChanges', ['resettable'])
203203 // @todo this could be written a lot cleaner!
204204 if ( ! allFormsClean ( ) ) {
205205 unsavedWarningsConfig . log ( "a form is dirty" ) ;
206- if ( ! confirm ( unsavedWarningsConfig . navigateMessage ) ) {
207- unsavedWarningsConfig . log ( "user wants to cancel leaving" ) ;
208- event . preventDefault ( ) ; // user clicks cancel, wants to stay on page
209- } else {
210- unsavedWarningsConfig . log ( "user doesn't care about loosing stuff" ) ;
211- $rootScope . $broadcast ( 'resetResettables' ) ;
212- }
206+ // allow any existing scope digest to complete
207+ setTimeout ( function ( ) {
208+ if ( ! confirm ( unsavedWarningsConfig . navigateMessage ) ) {
209+ unsavedWarningsConfig . log ( "user wants to cancel leaving" ) ;
210+ event . preventDefault ( ) ; // user clicks cancel, wants to stay on page
211+ } else {
212+ unsavedWarningsConfig . log ( "user doesn't care about loosing stuff" ) ;
213+ $rootScope . $broadcast ( 'resetResettables' ) ;
214+ }
215+ } ) ;
213216 } else {
214217 unsavedWarningsConfig . log ( "all forms are clean" ) ;
215218 }
@@ -237,8 +240,8 @@ angular.module('unsavedChanges', ['resettable'])
237240 }
238241] )
239242
240- . directive ( 'unsavedWarningForm' , [ 'unsavedWarningSharedService' , '$rootScope' ,
241- function ( unsavedWarningSharedService , $rootScope ) {
243+ . directive ( 'unsavedWarningForm' , [ 'unsavedWarningSharedService' , '$rootScope' , '$timeout' ,
244+ function ( unsavedWarningSharedService , $rootScope , $timeout ) {
242245 return {
243246 scope : { } ,
244247 require : '^form' ,
@@ -278,7 +281,10 @@ angular.module('unsavedChanges', ['resettable'])
278281 // trigger resettables within this form or element
279282 var resettables = angular . element ( formElement [ 0 ] . querySelector ( '[resettable]' ) ) ;
280283 if ( resettables . length ) {
281- scope . $apply ( resettables . triggerHandler ( 'resetResettables' ) ) ;
284+ // use safer method than $apply
285+ $timeout ( function ( ) {
286+ resettables . triggerHandler ( 'resetResettables' ) ;
287+ } ) ;
282288 }
283289
284290 // sets for back to valid and pristine states
0 commit comments