 <p>You'll find the <code>$locationChangeStart</code> is an event you can listen for to detect for a route change.</p> <p>Try something like</p> <pre><code>$rootScope.$on('$locationChangeStart', function (event, next, current) { /* do some verification */ }); </code></pre> <p><code>$route.reload()</code> will prevent the route change from going through.</p> <p>The distinction between user clicking back or changing the url etc will not make a difference. As browsers don't reload any resources when you alter the url past the <code>#</code> it's all still contained in your angular logic. This means all these methods should trigger the <code>$locationChangeStart</code> event.</p> <p>@Jon pointed out that the <code>$route</code> service will definitely be of use to you. the <code>.reload()</code> method will prevent the route change from completing but there is much more you can do with the <code>$route</code> service if you look into it - see <a href="http://docs.angularjs.org/api/ngRoute.$route" rel="nofollow">documentation</a>.</p>