fix(change detection): preserve memoized results from pure functions

This commit is contained in:
Yegor Jbanov
2015-06-17 12:56:11 -07:00
parent b0e2ebda70
commit 5beaf6d735
5 changed files with 23 additions and 11 deletions

View File

@ -291,7 +291,7 @@ export class ChangeDetectorJITGenerator {
if (r.isPureFunction()) {
var condition = r.args.map((a) => this._changeNames[a]).join(" || ");
return `if (${condition}) { ${check} }`;
return `if (${condition}) { ${check} } else { ${newValue} = ${oldValue}; }`;
} else {
return check;
}

View File

@ -69,12 +69,11 @@ var _rootBindings = [bind(Reflector).toValue(reflector), TestabilityRegistry];
function _injectorBindings(appComponentType): List<Type | Binding | List<any>> {
var bestChangeDetection: Type = DynamicChangeDetection;
// Re-enable once all e2e tests pass
// if (PreGeneratedChangeDetection.isSupported()) {
// bestChangeDetection = PreGeneratedChangeDetection;
//} else if (JitChangeDetection.isSupported()) {
// bestChangeDetection = JitChangeDetection;
//}
if (PreGeneratedChangeDetection.isSupported()) {
bestChangeDetection = PreGeneratedChangeDetection;
} else if (JitChangeDetection.isSupported()) {
bestChangeDetection = JitChangeDetection;
}
return [
bind(DOCUMENT_TOKEN)
.toValue(DOM.defaultDoc()),

View File

@ -352,7 +352,7 @@ class _CodegenState {
if (r.isPureFunction()) {
// Add an "if changed guard"
var condition = r.args.map((a) => _changeNames[a]).join(' || ');
return 'if ($condition) { $check }';
return 'if ($condition) { $check } else { $newValue = $oldValue; }';
} else {
return check;
}