@@ -765,7 +765,7 @@ angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider);
765765$StateProvider . $inject = [ '$urlRouterProvider' , '$urlMatcherFactoryProvider' , '$locationProvider' ] ;
766766function $StateProvider ( $urlRouterProvider , $urlMatcherFactory , $locationProvider ) {
767767
768- var root , states = { } , $state ;
768+ var root , states = { } , $state , queue = { } ;
769769
770770 // Builds state properties from definition passed to registerState()
771771 var stateBuilder = {
@@ -902,6 +902,13 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
902902 return undefined ;
903903 }
904904
905+ function queueState ( parentName , state ) {
906+ if ( ! queue [ parentName ] ) {
907+ queue [ parentName ] = [ ] ;
908+ }
909+ queue [ parentName ] . push ( state ) ;
910+ }
911+
905912
906913 function registerState ( state ) {
907914 // Wrap a new object around the state so we can store our private details easily.
@@ -915,6 +922,17 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
915922 if ( ! isString ( name ) || name . indexOf ( '@' ) >= 0 ) throw new Error ( "State must have a valid name" ) ;
916923 if ( states [ name ] ) throw new Error ( "State '" + name + "'' is already defined" ) ;
917924
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+
918936 for ( var key in stateBuilder ) {
919937 state [ key ] = stateBuilder [ key ] ( state ) ;
920938 }
@@ -928,6 +946,14 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
928946 }
929947 } ] ) ;
930948 }
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+
931957 return state ;
932958 }
933959
0 commit comments