File tree Expand file tree Collapse file tree 2 files changed +31
-0
lines changed
Expand file tree Collapse file tree 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) {
102102 if ( ! merged ) merge ( values , parent . $$values ) ;
103103 result . $$values = values ;
104104 result . $$promises = true ; // keep for isResolve()
105+ delete result . $$inheritedValues ;
105106 resolution . resolve ( values ) ;
106107 }
107108 }
@@ -117,12 +118,20 @@ function $Resolve( $q, $injector) {
117118 return result ;
118119 }
119120
121+ if ( parent . $$inheritedValues ) {
122+ merge ( values , parent . $$inheritedValues ) ;
123+ }
124+
120125 // Merge parent values if the parent has already resolved, or merge
121126 // parent promises and wait if the parent resolve is still in progress.
122127 if ( parent . $$values ) {
123128 merged = merge ( values , parent . $$values ) ;
129+ result . $$inheritedValues = parent . $$values ;
124130 done ( ) ;
125131 } else {
132+ if ( parent . $$inheritedValues ) {
133+ result . $$inheritedValues = parent . $$inheritedValues ;
134+ }
126135 extend ( promises , parent . $$promises ) ;
127136 parent . then ( done , fail ) ;
128137 }
Original file line number Diff line number Diff line change @@ -140,6 +140,28 @@ describe("resolve", function () {
140140 expect ( b . mostRecentCall . args ) . toEqual ( [ 'aa' ] ) ;
141141 } ) ;
142142
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+
143165 it ( "allows a function to override a parent value of the same name" , function ( ) {
144166 var r = $r . resolve ( { b : function ( ) { return 'B' } } ) ;
145167 var s = $r . resolve ( {
You can’t perform that action at this time.
0 commit comments