File tree 2 files changed +31
-0
lines changed
2 files changed +31
-0
lines changed Original file line number Diff line number Diff line change @@ -102,6 +102,7 @@ function $Resolve( $q, $injector) {
102
102
if ( ! merged ) merge ( values , parent . $$values ) ;
103
103
result . $$values = values ;
104
104
result . $$promises = true ; // keep for isResolve()
105
+ delete result . $$inheritedValues ;
105
106
resolution . resolve ( values ) ;
106
107
}
107
108
}
@@ -117,12 +118,20 @@ function $Resolve( $q, $injector) {
117
118
return result ;
118
119
}
119
120
121
+ if ( parent . $$inheritedValues ) {
122
+ merge ( values , parent . $$inheritedValues ) ;
123
+ }
124
+
120
125
// Merge parent values if the parent has already resolved, or merge
121
126
// parent promises and wait if the parent resolve is still in progress.
122
127
if ( parent . $$values ) {
123
128
merged = merge ( values , parent . $$values ) ;
129
+ result . $$inheritedValues = parent . $$values ;
124
130
done ( ) ;
125
131
} else {
132
+ if ( parent . $$inheritedValues ) {
133
+ result . $$inheritedValues = parent . $$inheritedValues ;
134
+ }
126
135
extend ( promises , parent . $$promises ) ;
127
136
parent . then ( done , fail ) ;
128
137
}
Original file line number Diff line number Diff line change @@ -140,6 +140,28 @@ describe("resolve", function () {
140
140
expect ( b . mostRecentCall . args ) . toEqual ( [ 'aa' ] ) ;
141
141
} ) ;
142
142
143
+ it ( "allow access to ancestor resolves in descendent resolve blocks" , inject ( function ( $q ) {
144
+ var gPromise = $q . defer ( ) ,
145
+ gInjectable = jasmine . createSpy ( 'gInjectable' ) . andReturn ( gPromise . promise ) ,
146
+ pPromise = $q . defer ( ) ,
147
+ pInjectable = jasmine . createSpy ( 'pInjectable' ) . andReturn ( pPromise . promise ) ;
148
+
149
+ var g = $r . resolve ( { gP : [ gInjectable ] } , g ) ;
150
+
151
+ gPromise . resolve ( 'grandparent' ) ;
152
+ tick ( ) ;
153
+
154
+ var s = jasmine . createSpy ( 's' ) ;
155
+ var p = $r . resolve ( { p : [ pInjectable ] } , g ) ;
156
+ var c = $r . resolve ( { c : [ 'p' , 'gP' , s ] } , p ) ;
157
+
158
+ pPromise . resolve ( 'parent' ) ;
159
+ tick ( ) ;
160
+
161
+ expect ( s ) . toHaveBeenCalled ( ) ;
162
+ expect ( s . mostRecentCall . args ) . toEqual ( [ 'parent' , 'grandparent' ] ) ;
163
+ } ) ) ;
164
+
143
165
it ( "allows a function to override a parent value of the same name" , function ( ) {
144
166
var r = $r . resolve ( { b : function ( ) { return 'B' } } ) ;
145
167
var s = $r . resolve ( {
You can’t perform that action at this time.
0 commit comments