diff --git a/src/ng/directive/ngRepeat.js b/src/ng/directive/ngRepeat.js index a7d558957d2d..0fd53c2f6657 100644 --- a/src/ng/directive/ngRepeat.js +++ b/src/ng/directive/ngRepeat.js @@ -212,7 +212,7 @@ var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) { nextBlockOrder = []; - if (isArray(collection)) { + if (isArrayLike(collection)) { collectionKeys = collection; } else { // if object, extract keys, sort them and use to determine order of iteration over obj props diff --git a/src/ng/rootScope.js b/src/ng/rootScope.js index 10b31dd101b1..0892843da019 100644 --- a/src/ng/rootScope.js +++ b/src/ng/rootScope.js @@ -376,7 +376,7 @@ function $RootScopeProvider(){ oldValue = newValue; changeDetected++; } - } else if (isArray(newValue)) { + } else if (isArrayLike(newValue)) { if (oldValue !== internalArray) { // we are transitioning from something which was not an array into array. oldValue = internalArray; diff --git a/test/ng/directive/ngRepeatSpec.js b/test/ng/directive/ngRepeatSpec.js index 4372f57ab424..471bf4710380 100644 --- a/test/ng/directive/ngRepeatSpec.js +++ b/test/ng/directive/ngRepeatSpec.js @@ -55,6 +55,26 @@ describe('ngRepeat', function() { }); + it('should iterate over an array-like object', function() { + element = $compile( + '
" + + "a" + + "b" + + "c" + + "
"; + + var htmlCollection = document.getElementsByTagName('a'); + scope.items = htmlCollection; + scope.$digest(); + expect(element.find('li').length).toEqual(3); + expect(element.text()).toEqual('x;y;x;'); + }); + + it('should iterate over on object/map', function() { element = $compile( '