AngularJS window.onbeforeunload in one controller is being triggered on another controller

Unregister the onbeforeunload event when the controller which defined it goes out of scope:

$scope.$on('$destroy', function() {
    delete window.onbeforeunload;
});

I just attempted the above solution, and that wasn't working for me. Even manually typing delete window.onbeforeunload in the console wouldn't remove the function. I needed to set the property to undefined instead.

$scope.$on('$destroy', function(e){
  $window.onbeforeunload = undefined;
});

For those of you using angular-ui-router you would use is $stateChangeStart instead of $locationChangeStart, e.g.

$scope.$on('$stateChangeStart', function (event){
  if (forbit){
    event.preventDefault()
  }
  else{  
    return
  }
})