From c49b8a2db5d916a9213547125af996d6c853230c Mon Sep 17 00:00:00 2001 From: Vojta Jina Date: Fri, 13 Jan 2012 16:38:08 -0800 Subject: fix($location): do not $digest if browser's url change fired within $apply/$digest Chrome (probably other browsers as well) fires 'hashchange' event synchronously, so if you change raw location from within $apply/$digest, we don't want to $apply twice. (It would throw an exception) --- src/service/location.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/service/location.js b/src/service/location.js index d0ae9de7..3e8ba0c3 100644 --- a/src/service/location.js +++ b/src/service/location.js @@ -530,8 +530,10 @@ function $LocationProvider(){ // update $location when $browser url changes $browser.onUrlChange(function(newUrl) { if (currentUrl.absUrl() != newUrl) { - currentUrl.$$parse(newUrl); - $rootScope.$apply(); + $rootScope.$evalAsync(function() { + currentUrl.$$parse(newUrl); + }); + if (!$rootScope.$$phase) $rootScope.$digest(); } }); -- cgit v1.2.3