diff options
| -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 9a5a68ba..b6d14e1a 100644 --- a/src/ng/location.js +++ b/src/ng/location.js @@ -546,6 +546,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 bb0659a5..fb828044 100644 --- a/test/ng/locationSpec.js +++ b/test/ng/locationSpec.js @@ -1237,7 +1237,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); @@ -1248,6 +1248,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/']);        })      );  | 
