I had this same problem, but my call to $location was ALREADY within a digest. Calling $apply() just gave a $digest already in process error.
This trick worked (and be sure to inject $location
into your controller):
$timeout(function(){
$location...
},1);
Though no idea why this was necessary...