From 143b781cca33336fb67f598841a5b235f8e2129e Mon Sep 17 00:00:00 2001 From: Vladimir Bulyga Date: Tue, 26 Apr 2016 14:00:34 +0300 Subject: [PATCH] disallow route change until the 'resolve' will not be resolved #114 --- src/route-segment.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/route-segment.js b/src/route-segment.js index d68c01c..154b4c2 100644 --- a/src/route-segment.js +++ b/src/route-segment.js @@ -394,13 +394,24 @@ mod.provider( '$routeSegment', }; var resolvingSemaphoreChain = {}; + var lastPromise = null; + var nextRequest; - // When a route changes, all interested parties should be notified about new segment chain - $rootScope.$on('$routeChangeSuccess', function(event, args) { + function $routeChangeSuccess(event, args) { var route = args.$route || args.$$route; if(route && route.segment) { + if (lastPromise) { + nextRequest = arguments; + return lastPromise.finally(function () { + lastPromise = null; + var nextRequestArguments = nextRequest; + nextRequest = null; + $routeChangeSuccess.apply(null, nextRequestArguments); + }); + } + var segmentName = route.segment; var segmentNameChain = segmentName.split("."); var updates = [], lastUpdateIndex = -1; @@ -500,7 +511,9 @@ mod.provider( '$routeSegment', return defaultChildUpdatePromise; }); } - }); + } + + $rootScope.$on('$routeChangeSuccess', $routeChangeSuccess); function isDependenciesChanged(segment) {