aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ng/directive/ngRepeat.js2
-rw-r--r--test/ng/directive/ngRepeatSpec.js20
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>' +