mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-05-10 07:44:43 +00:00
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:
parent
6a831495de
commit
cde2f1a868
2 changed files with 19 additions and 8 deletions
|
|
@ -119,14 +119,7 @@ var ngRepeatDirective = ngDirective({
|
||||||
key = (collection === array) ? index : array[index];
|
key = (collection === array) ? index : array[index];
|
||||||
value = collection[key];
|
value = collection[key];
|
||||||
|
|
||||||
// if value is object, it can be shifted to allow for position change
|
last = lastOrder.shift(value);
|
||||||
// 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;
|
|
||||||
|
|
||||||
|
|
||||||
if (last) {
|
if (last) {
|
||||||
// if we have already seen this object, then we need to reuse the
|
// if we have already seen this object, then we need to reuse the
|
||||||
|
|
|
||||||
|
|
@ -431,5 +431,23 @@ describe('ngRepeat', function() {
|
||||||
expect(newElements[1]).toEqual(lis[1]);
|
expect(newElements[1]).toEqual(lis[1]);
|
||||||
expect(newElements[2]).toEqual(lis[0]);
|
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]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue