1
1
$StateProvider . $inject = [ '$urlRouterProvider' , '$urlMatcherFactoryProvider' , '$locationProvider' ] ;
2
2
function $StateProvider ( $urlRouterProvider , $urlMatcherFactory , $locationProvider ) {
3
3
4
- var root , states = { } , $state ;
4
+ var root , states = { } , $state , queue = [ ] ;
5
5
6
6
// Builds state properties from definition passed to registerState()
7
7
var stateBuilder = {
@@ -143,6 +143,13 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
143
143
return undefined ;
144
144
}
145
145
146
+ function queueState ( parentName , state ) {
147
+ if ( ! queue [ parentName ] ) {
148
+ queue [ parentName ] = [ ] ;
149
+ }
150
+
151
+ queue [ parentName ] . push ( state ) ;
152
+ }
146
153
147
154
function registerState ( state ) {
148
155
// Wrap a new object around the state so we can store our private details easily.
@@ -156,6 +163,14 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
156
163
if ( ! isString ( name ) || name . indexOf ( '@' ) >= 0 ) throw new Error ( "State must have a valid name" ) ;
157
164
if ( states [ name ] ) throw new Error ( "State '" + name + "'' is already defined" ) ;
158
165
166
+ // If parent is not registered yet, add state to queue and register later
167
+ if ( name . indexOf ( '.' ) !== - 1 ) {
168
+ var parentName = name . substring ( 0 , name . lastIndexOf ( '.' ) ) ;
169
+ if ( ! states [ parentName ] ) {
170
+ return queueState ( parentName , state . self ) ;
171
+ }
172
+ }
173
+
159
174
for ( var key in stateBuilder ) {
160
175
if ( isFunction ( stateBuilder [ key ] ) ) state [ key ] = stateBuilder [ key ] ( state , stateBuilder . $delegates [ key ] ) ;
161
176
}
@@ -170,6 +185,13 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
170
185
} ] ) ;
171
186
}
172
187
188
+ // Register any queued children
189
+ if ( queue [ name ] ) {
190
+ for ( var i = 0 ; i < queue [ name ] . length ; i ++ ) {
191
+ registerState ( queue [ name ] [ i ] ) ;
192
+ }
193
+ }
194
+
173
195
return state ;
174
196
}
175
197
0 commit comments