diff options
| -rw-r--r-- | src/ng/directive/ngRepeat.js | 2 | ||||
| -rw-r--r-- | test/ng/directive/ngRepeatSpec.js | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/ng/directive/ngRepeat.js b/src/ng/directive/ngRepeat.js index a7d55895..0fd53c2f 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/test/ng/directive/ngRepeatSpec.js b/test/ng/directive/ngRepeatSpec.js index fbd1a2dc..ac1ce7e7 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( + '<ul>' + + '<li ng-repeat="item in items">{{item.name}};</li>' + + '</ul>')(scope); + + document.body.innerHTML = "<p>" + + "<a name='x'>a</a>" + + "<a name='y'>b</a>" + + "<a name='x'>c</a>" + + "</p>"; + + 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( '<ul>' + |
