@@ -23,10 +23,40 @@ var isObject;
23
23
* <div doc-module-components="ngRoute"></div>
24
24
*/
25
25
/* global -ngRouteModule */
26
- var ngRouteModule = angular . module ( 'ngRoute' , [ 'ng' ] ) .
27
- provider ( '$route' , $RouteProvider ) ,
26
+ var ngRouteModule = angular . module ( 'ngRoute' , [ 'ng' ] )
27
+ . provider ( '$route' , $RouteProvider )
28
+ . factory ( '$$trackLocationChanges' , [ '$rootScope' , $$trackLocationChanges ] )
29
+ . run ( [ '$$trackLocationChanges' , function ( $$trackLocationChanges ) {
30
+ $$trackLocationChanges . start ( ) ;
31
+ } ] ) ,
32
+
28
33
$routeMinErr = angular . $$minErr ( 'ngRoute' ) ;
29
34
35
+ function $$trackLocationChanges ( $rootScope ) {
36
+ var removeStartHandler , removeSuccessHandler ;
37
+ var service = {
38
+ start : function ( ) {
39
+ removeStartHandler = $rootScope . $on ( '$locationChangeStart' , storeStartEvent ) ;
40
+ removeSuccessHandler = $rootScope . $on ( '$locationChangeSuccess' , storeSuccessEvent ) ;
41
+ } ,
42
+ stop : function ( ) {
43
+ removeStartHandler ( ) ;
44
+ removeSuccessHandler ( ) ;
45
+ }
46
+ } ;
47
+
48
+ return service ;
49
+
50
+ function storeStartEvent ( e ) {
51
+ service . startEvent = e ;
52
+ delete service . successEvent ;
53
+ }
54
+
55
+ function storeSuccessEvent ( e ) {
56
+ service . successEvent = e ;
57
+ }
58
+ }
59
+
30
60
/**
31
61
* @ngdoc provider
32
62
* @name $routeProvider
@@ -295,7 +325,9 @@ function $RouteProvider() {
295
325
'$injector' ,
296
326
'$templateRequest' ,
297
327
'$sce' ,
298
- function ( $rootScope , $location , $routeParams , $q , $injector , $templateRequest , $sce ) {
328
+ '$$trackLocationChanges' ,
329
+ function ( $rootScope , $location , $routeParams , $q , $injector , $templateRequest , $sce , $$trackLocationChanges ) {
330
+
299
331
300
332
/**
301
333
* @ngdoc service
@@ -555,6 +587,12 @@ function $RouteProvider() {
555
587
}
556
588
} ;
557
589
590
+ if ( $$trackLocationChanges . successEvent ) {
591
+ prepareRoute ( $$trackLocationChanges . startEvent ) ;
592
+ commitRoute ( $$trackLocationChanges . successEvent ) ;
593
+ }
594
+ $$trackLocationChanges . stop ( ) ;
595
+
558
596
$rootScope . $on ( '$locationChangeStart' , prepareRoute ) ;
559
597
$rootScope . $on ( '$locationChangeSuccess' , commitRoute ) ;
560
598
@@ -612,6 +650,7 @@ function $RouteProvider() {
612
650
}
613
651
614
652
function commitRoute ( ) {
653
+ $route . initialized = true ;
615
654
var lastRoute = $route . current ;
616
655
var nextRoute = preparedRoute ;
617
656
0 commit comments