diff --git a/modules/change_detection/src/change_detector.js b/modules/change_detection/src/change_detector.js index 058defcdca..79a3baa392 100644 --- a/modules/change_detection/src/change_detector.js +++ b/modules/change_detection/src/change_detector.js @@ -17,24 +17,23 @@ export class ChangeDetector { var count = 0; var updatedRecords = null; var record = this._rootRecordRange.findFirstEnabledRecord(); + var currentRange, currentGroup; while (isPresent(record)) { - var currentRange = record.recordRange; - var currentGroup = record.groupMemento(); - if (record.check()) { count++; if (record.terminatesExpression()) { + currentRange = record.recordRange; + currentGroup = record.groupMemento(); updatedRecords = this._addRecord(updatedRecords, record); } } if (isPresent(updatedRecords)) { var nextEnabled = record.nextEnabled; - var nextRange = isPresent(nextEnabled) ? nextEnabled.recordRange : null; - var nextGroup = isPresent(nextEnabled) ? nextEnabled.groupMemento() : null; - - if (currentRange != nextRange || currentGroup != nextGroup) { + if (isBlank(nextEnabled) || // we have reached the last enabled record + currentRange != nextEnabled.recordRange || // the next record is in a different range + currentGroup != nextEnabled.groupMemento()) { // the next record is in a different group currentRange.dispatcher.onRecordChange(currentGroup, updatedRecords); updatedRecords = null; }