If you are using ui.router, you can use the $stateChangeStart, $stateChangeSuccess and $stateChangeError to trigger when and when not to show the loading cursor. If you are using routes, simply use $routeChangeStart, $routeChangeSuccess and $routeChangeError in replacement.
//loading controls
document.body.style.cursor='default';
$scope.$on('$stateChangeStart', function() {
document.body.style.cursor='wait';
});
$scope.$on('$stateChangeSuccess', function() {
document.body.style.cursor='default';
});
$scope.$on('$stateChangeError', function() {
document.body.style.cursor='default';
});
You can also use these state changes to trigger a loading icon.
//loading controls
$scope.isViewLoading = false;
document.body.style.cursor='default';
$scope.$on('$stateChangeStart', function() {
$scope.isViewLoading = true;
document.body.style.cursor='wait';
});
$scope.$on('$stateChangeSuccess', function() {
$scope.isViewLoading = false;
document.body.style.cursor='default';
});
$scope.$on('$stateChangeError', function() {
$scope.isViewLoading = false;
document.body.style.cursor='default';
});
<span class="spinner" ng-show="isViewLoading">Loading...</span>