@@ -765,7 +765,7 @@ angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider);
765
765
$StateProvider . $inject = [ '$urlRouterProvider' , '$urlMatcherFactoryProvider' , '$locationProvider' ] ;
766
766
function $StateProvider ( $urlRouterProvider , $urlMatcherFactory , $locationProvider ) {
767
767
768
- var root , states = { } , $state ;
768
+ var root , states = { } , $state , queue = { } ;
769
769
770
770
// Builds state properties from definition passed to registerState()
771
771
var stateBuilder = {
@@ -902,6 +902,13 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
902
902
return undefined ;
903
903
}
904
904
905
+ function queueState ( parentName , state ) {
906
+ if ( ! queue [ parentName ] ) {
907
+ queue [ parentName ] = [ ] ;
908
+ }
909
+ queue [ parentName ] . push ( state ) ;
910
+ }
911
+
905
912
906
913
function registerState ( state ) {
907
914
// Wrap a new object around the state so we can store our private details easily.
@@ -915,6 +922,17 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
915
922
if ( ! isString ( name ) || name . indexOf ( '@' ) >= 0 ) throw new Error ( "State must have a valid name" ) ;
916
923
if ( states [ name ] ) throw new Error ( "State '" + name + "'' is already defined" ) ;
917
924
925
+ //get parent name
926
+ var parentName =
927
+ ( name . indexOf ( '.' ) !== - 1 ) ? name . substring ( 0 , name . lastIndexOf ( '.' ) )
928
+ : ( isString ( state . parent ) ) ? state . parent
929
+ : '' ;
930
+
931
+ // If parent is not registered yet, add state to queue and register later
932
+ if ( parentName && ! states [ parentName ] ) {
933
+ return queueState ( parentName , state . self ) ;
934
+ }
935
+
918
936
for ( var key in stateBuilder ) {
919
937
state [ key ] = stateBuilder [ key ] ( state ) ;
920
938
}
@@ -928,6 +946,14 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
928
946
}
929
947
} ] ) ;
930
948
}
949
+
950
+ // Register any queued children
951
+ if ( queue [ name ] ) {
952
+ for ( var i = 0 ; i < queue [ name ] . length ; i ++ ) {
953
+ registerState ( queue [ name ] [ i ] ) ;
954
+ }
955
+ }
956
+
931
957
return state ;
932
958
}
933
959
0 commit comments