fix(ngRepeat): support mostly-stable repeating for primitives

I'm reverting changes that were originally done to ngRepeat to fix #933,
because these are now not necessary after the previous changes to keep
ngModel always synced with the DOM.
This commit is contained in:
Igor Minar 2012-11-23 22:43:30 +01:00
parent 6a831495de
commit cde2f1a868
2 changed files with 19 additions and 8 deletions

View file

@ -119,14 +119,7 @@ var ngRepeatDirective = ngDirective({
key = (collection === array) ? index : array[index];
value = collection[key];
// if value is object, it can be shifted to allow for position change
// if is not object, need to first check whether index is same to avoid shifting wrong val
last = isObject(value)
? lastOrder.shift(value)
: (last = lastOrder.peek(value)) && (index === last.index)
? lastOrder.shift(value)
: undefined;
last = lastOrder.shift(value);
if (last) {
// if we have already seen this object, then we need to reuse the

View file

@ -431,5 +431,23 @@ describe('ngRepeat', function() {
expect(newElements[1]).toEqual(lis[1]);
expect(newElements[2]).toEqual(lis[0]);
});
it('should reuse elements even when model is composed of primitives', function() {
// rebuilding repeater from scratch can be expensive, we should try to avoid it even for
// model that is composed of primitives.
scope.items = ['hello', 'cau', 'ahoj'];
scope.$digest();
lis = element.find('li');
scope.items = ['ahoj', 'hello', 'cau'];
scope.$digest();
var newLis = element.find('li');
expect(newLis.length).toEqual(3);
expect(newLis[0]).toEqual(lis[2]);
expect(newLis[1]).toEqual(lis[0]);
expect(newLis[2]).toEqual(lis[1]);
});
});
});