aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Minar2011-10-18 16:46:27 -0700
committerIgor Minar2011-10-18 17:27:43 -0700
commit833eb3c84445110dc1dad238120573f08ed8d102 (patch)
tree859e4b51c7b27eed05e1d1047ad89f6583b8b695
parent07926ff1ef2912a6fb8f361ae9b3c98bc3da1dc8 (diff)
downloadangular.js-833eb3c84445110dc1dad238120573f08ed8d102.tar.bz2
fix(ng:repeat): repeater should ignore $ and $$ properties
-rw-r--r--src/widgets.js2
-rw-r--r--test/widgetsSpec.js22
2 files changed, 23 insertions, 1 deletions
diff --git a/src/widgets.js b/src/widgets.js
index f1f46419..423fe6dd 100644
--- a/src/widgets.js
+++ b/src/widgets.js
@@ -373,7 +373,7 @@ angularWidget('@ng:repeat', function(expression, element){
cursor = iterStartElement; // current position of the node
for (key in collection) {
- if (collection.hasOwnProperty(key)) {
+ if (collection.hasOwnProperty(key) && key.charAt(0) != '$') {
last = lastOrder.shift(value = collection[key]);
if (last) {
// if we have already seen this object, then we need to reuse the
diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js
index b6754b91..90555325 100644
--- a/test/widgetsSpec.js
+++ b/test/widgetsSpec.js
@@ -290,6 +290,28 @@ describe("widget", function() {
expect(element.text()).toEqual('misko:m:first|shyam:s:last|');
});
+ it('should ignore $ and $$ properties', function() {
+ var scope = compile('<ul><li ng:repeat="i in items">{{i}}|</li></ul>');
+ scope.items = ['a', 'b', 'c'];
+ scope.items.$$hashkey = 'xxx';
+ scope.items.$root = 'yyy';
+ scope.$digest();
+
+ expect(element.text()).toEqual('a|b|c|');
+ });
+
+ it('should repeat over nested arrays', function() {
+ var scope = compile('<ul>' +
+ '<li ng:repeat="subgroup in groups">' +
+ '<div ng:repeat="group in subgroup">{{group}}|</div>X' +
+ '</li>' +
+ '</ul>');
+ scope.groups = [['a', 'b'], ['c','d']];
+ scope.$digest();
+
+ expect(element.text()).toEqual('a|b|Xc|d|X');
+ });
+
describe('stability', function() {
var a, b, c, d, scope, lis;