diff options
| author | quazzie | 2013-03-22 10:35:50 +0100 |
|---|---|---|
| committer | Pete Bacon Darwin | 2013-05-01 14:51:05 +0100 |
| commit | ac086ae61619a86ee77149f39193d264a191932a (patch) | |
| tree | 67dfd34e9b402f650fc83f6b56bc5defe0d38835 | |
| parent | f75a2b093f7a5ba68ea3e421c02acb6cd17c1896 (diff) | |
| download | angular.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.js | 4 | ||||
| -rw-r--r-- | test/ng/locationSpec.js | 4 |
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/']); }) ); |
