Skip to content

Commit 64b9bea

Browse files
Merge pull request #1360 from angular-ui/issue-1317
fix($resolve): use resolvefn result,not parent resolved value of same name
2 parents 6940dec + 67f5e00 commit 64b9bea

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

src/resolve.js

+16-7
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ function $Resolve( $q, $injector) {
4141
*/
4242
this.study = function (invocables) {
4343
if (!isObject(invocables)) throw new Error("'invocables' must be an object");
44+
var invocableKeys = Object.keys(invocables || {});
4445

4546
// Perform a topological sort of invocables to build an ordered plan
4647
var plan = [], cycle = [], visited = {};
@@ -101,7 +102,7 @@ function $Resolve( $q, $injector) {
101102
if (!--wait) {
102103
if (!merged) merge(values, parent.$$values);
103104
result.$$values = values;
104-
result.$$promises = true; // keep for isResolve()
105+
result.$$promises = result.$$promises || true; // keep for isResolve()
105106
delete result.$$inheritedValues;
106107
resolution.resolve(values);
107108
}
@@ -111,28 +112,36 @@ function $Resolve( $q, $injector) {
111112
result.$$failure = reason;
112113
resolution.reject(reason);
113114
}
114-
115+
116+
// TODO: Remove this when we merge in 'new' branch
117+
function omit(obj) {
118+
var copy = {}, keys = angular.isArray(arguments[1]) ? arguments[1] : arguments.slice(1);
119+
for (var key in obj)
120+
if (keys.indexOf(key) == -1) copy[key] = obj[key];
121+
return copy;
122+
}
123+
115124
// Short-circuit if parent has already failed
116125
if (isDefined(parent.$$failure)) {
117126
fail(parent.$$failure);
118127
return result;
119128
}
120129

121130
if (parent.$$inheritedValues) {
122-
merge(values, parent.$$inheritedValues);
131+
merge(values, omit(parent.$$inheritedValues, invocableKeys));
123132
}
124133

125134
// Merge parent values if the parent has already resolved, or merge
126135
// parent promises and wait if the parent resolve is still in progress.
136+
extend(promises, parent.$$promises);
127137
if (parent.$$values) {
128-
merged = merge(values, parent.$$values);
129-
result.$$inheritedValues = parent.$$values;
138+
merged = merge(values, omit(parent.$$values, invocableKeys));
139+
result.$$inheritedValues = omit(parent.$$values, invocableKeys);
130140
done();
131141
} else {
132142
if (parent.$$inheritedValues) {
133-
result.$$inheritedValues = parent.$$inheritedValues;
143+
result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys);
134144
}
135-
extend(promises, parent.$$promises);
136145
parent.then(done, fail);
137146
}
138147

0 commit comments

Comments
 (0)