Есть связка событий
$rootScope.$on('$routeChangeStart', (event, next, current) => {
console.log('current', current, next);
event.preventDefault();
});
$rootScope.$on('$routeChangeError', (event, current, prevoius, reason) => {
console.log('err', [event, current, prevoius, reason]);
});
Событие routeChangeStart срабатывает и event.preventDefault() запрещает смену пути, но событие routeChangeError после этого не срабатывает.
Нужно запретить смену пути так, чтобы сработало событие routeChangeError и я в него мог передать причину, почему я запретил смену пути.
https://docs.angularjs.org/api/ngRoute/service/$route