ui-router resume preventedEvent

I want users to be notified that they have to save changes when they navigate to another page. Therefore I listen to the stateChangeStart Event of UI-ROUTER. I need to prevent the event to prevent, that the next page doesn't load the values before they are saved. When I manually navigate to the desired page via $state.go(..) I keep hanging in a loop of stateChangeStart Events

$scope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
    event.preventDefault(); 

    var confirmPopup = $ionicPopup.confirm({
        ....
    });
    confirmPopup.then(function(res){
        ....
        }
        $ionicNavBarDelegate.back();
    });
}); 

How to log of the stateChangeStart-Event?

Edit:

$urlRouter.sync();
$state.go(toState.name, {id:toParams.id}, {reload: false});

Stays inside the loop.

$urlRouter.sync()

Returns null.

Triggers an update; the same update that happens when the address bar url changes, aka $locationChangeSuccess. This method is useful when you need to use preventDefault() on the $locationChangeSuccess event, perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed with the transition by calling $urlRouter.sync().

See docs.

The use of the urlRouter.sync() is pretty obvious if you look at the docs, if you want to go to another state or want to check something in between the transition, you could also do this to prevent a redirect loop:

var nextState = null;
$rootScope.$on('$stateChangeStart', function (event, next, current) {
        if (next.name == nextState) return;
        event.preventDefault();
        nextState = next.name;
        $state.go(next.name);

});