aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorquazzie2013-03-22 10:35:50 +0100
committerPete Bacon Darwin2013-05-01 14:51:05 +0100
commitac086ae61619a86ee77149f39193d264a191932a (patch)
tree67dfd34e9b402f650fc83f6b56bc5defe0d38835
parentf75a2b093f7a5ba68ea3e421c02acb6cd17c1896 (diff)
downloadangular.js-ac086ae61619a86ee77149f39193d264a191932a.tar.bz2
fix($location): back-button should fire $locationChangeStart
Before $locationChangeStart event is not broadcast when pressing the back-button on the browser. Closes #2109
-rw-r--r--src/ng/location.js4
-rw-r--r--test/ng/locationSpec.js4
2 files changed, 7 insertions, 1 deletions
diff --git a/src/ng/location.js b/src/ng/location.js
index 3196b1d5..e99137d5 100644
--- a/src/ng/location.js
+++ b/src/ng/location.js
@@ -577,6 +577,10 @@ function $LocationProvider(){
// update $location when $browser url changes
$browser.onUrlChange(function(newUrl) {
if ($location.absUrl() != newUrl) {
+ if ($rootScope.$broadcast('$locationChangeStart', newUrl, $location.absUrl()).defaultPrevented) {
+ $browser.url($location.absUrl());
+ return;
+ }
$rootScope.$evalAsync(function() {
var oldUrl = $location.absUrl();
diff --git a/test/ng/locationSpec.js b/test/ng/locationSpec.js
index bf91c250..b6efe783 100644
--- a/test/ng/locationSpec.js
+++ b/test/ng/locationSpec.js
@@ -1216,7 +1216,7 @@ describe('$location', function() {
expect($location.url()).toEqual('');
$rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl) {
- throw Error('there is no before when user enters URL directly to browser');
+ $log.info('start', newUrl, oldUrl);
});
$rootScope.$on('$locationChangeSuccess', function(event, newUrl, oldUrl) {
$log.info('after', newUrl, oldUrl);
@@ -1227,6 +1227,8 @@ describe('$location', function() {
$browser.poll();
expect($log.info.logs.shift()).
+ toEqual(['start', 'http://server/#/somePath', 'http://server/']);
+ expect($log.info.logs.shift()).
toEqual(['after', 'http://server/#/somePath', 'http://server/']);
})
);