22
22
$StateProvider . $inject = [ '$urlRouterProvider' , '$urlMatcherFactoryProvider' ] ;
23
23
function $StateProvider ( $urlRouterProvider , $urlMatcherFactory ) {
24
24
25
- var root , states = { } , $state , queue = { } , abstractKey = 'abstract' ;
25
+ var root , states = { } , $state , queue = { } , abstractKey = 'abstract' , isRuntime = false ;
26
26
27
27
// Builds state properties from definition passed to registerState()
28
28
var stateBuilder = {
@@ -156,6 +156,13 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory) {
156
156
queue [ parentName ] . push ( state ) ;
157
157
}
158
158
159
+ function flushQueuedChildren ( parentName ) {
160
+ var queued = queue [ parentName ] || [ ] ;
161
+ while ( queued . length ) {
162
+ registerState ( queued . shift ( ) ) ;
163
+ }
164
+ }
165
+
159
166
function registerState ( state ) {
160
167
// Wrap a new object around the state so we can store our private details easily.
161
168
state = inherit ( state , {
@@ -171,10 +178,11 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory) {
171
178
// Get parent name
172
179
var parentName = ( name . indexOf ( '.' ) !== - 1 ) ? name . substring ( 0 , name . lastIndexOf ( '.' ) )
173
180
: ( isString ( state . parent ) ) ? state . parent
181
+ : ( isObject ( state . parent ) && isString ( state . parent . name ) ) ? state . parent . name
174
182
: '' ;
175
183
176
184
// If parent is not registered yet, add state to queue and register later
177
- if ( parentName && ! states [ parentName ] ) {
185
+ if ( name !== "" && ( ! isRuntime || ! states [ parentName ] ) ) {
178
186
return queueState ( parentName , state . self ) ;
179
187
}
180
188
@@ -193,11 +201,7 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory) {
193
201
}
194
202
195
203
// Register any queued children
196
- if ( queue [ name ] ) {
197
- for ( var i = 0 ; i < queue [ name ] . length ; i ++ ) {
198
- registerState ( queue [ name ] [ i ] ) ;
199
- }
200
- }
204
+ flushQueuedChildren ( name ) ;
201
205
202
206
return state ;
203
207
}
@@ -523,8 +527,8 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory) {
523
527
* you're coming from.
524
528
*/
525
529
this . $get = $get ;
526
- $get . $inject = [ '$rootScope' , '$q' , '$view' , '$injector' , '$resolve' , '$stateParams' , '$urlRouter' ] ;
527
- function $get ( $rootScope , $q , $view , $injector , $resolve , $stateParams , $urlRouter ) {
530
+ $get . $inject = [ '$rootScope' , '$q' , '$view' , '$injector' , '$resolve' , '$stateParams' , '$urlRouter' , '$location' , '$urlMatcherFactory' ] ;
531
+ function $get ( $rootScope , $q , $view , $injector , $resolve , $stateParams , $urlRouter , $location , $urlMatcherFactory ) {
528
532
529
533
var TransitionSuperseded = $q . reject ( new Error ( 'transition superseded' ) ) ;
530
534
var TransitionPrevented = $q . reject ( new Error ( 'transition prevented' ) ) ;
@@ -1192,6 +1196,9 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory) {
1192
1196
} ) ;
1193
1197
}
1194
1198
1199
+ isRuntime = true ;
1200
+ flushQueuedChildren ( "" ) ;
1201
+
1195
1202
return $state ;
1196
1203
}
1197
1204
0 commit comments