aboutsummaryrefslogtreecommitdiffstats
path: root/src/Angular.js
diff options
context:
space:
mode:
authorR. Merkert2013-04-16 20:09:43 -0400
committerPete Bacon Darwin2013-05-08 12:45:32 +0100
commit6d0b325f7f5b9c1f3cfac9b73c6cd5fc3d1e2af0 (patch)
tree0e4d9d260888a5f242c3d8fa18207c9cbb0de002 /src/Angular.js
parentcf4729faa3e6e0a5178e2064a6f3cfd345686554 (diff)
downloadangular.js-6d0b325f7f5b9c1f3cfac9b73c6cd5fc3d1e2af0.tar.bz2
fix(angular): do not copy $$hashKey in copy/extend functions.
Copying the $$hashKey as part of copy/extend operations makes little sense since hashkey is used primarily as an object id, especially in the context of the ngRepeat directive. This change maintains the existing $$hashKey of an object that is being copied into (likewise for extend). It is not uncommon to take an item in a collection, copy it, and then append it to the collection. By copying the $$hashKey, this leads to duplicate object errors with the current ngRepeat. Closes #1875
Diffstat (limited to 'src/Angular.js')
-rw-r--r--src/Angular.js20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/Angular.js b/src/Angular.js
index bf64c6c2..45023d6c 100644
--- a/src/Angular.js
+++ b/src/Angular.js
@@ -215,6 +215,21 @@ function nextUid() {
return uid.join('');
}
+
+/**
+ * Set or clear the hashkey for an object.
+ * @param obj object
+ * @param h the hashkey (!truthy to delete the hashkey)
+ */
+function setHashKey(obj, h) {
+ if (h) {
+ obj.$$hashKey = h;
+ }
+ else {
+ delete obj.$$hashKey;
+ }
+}
+
/**
* @ngdoc function
* @name angular.extend
@@ -228,6 +243,7 @@ function nextUid() {
* @param {...Object} src Source object(s).
*/
function extend(dst) {
+ var h = dst.$$hashKey;
forEach(arguments, function(obj){
if (obj !== dst) {
forEach(obj, function(value, key){
@@ -235,6 +251,8 @@ function extend(dst) {
});
}
});
+
+ setHashKey(dst,h);
return dst;
}
@@ -594,12 +612,14 @@ function copy(source, destination){
destination.push(copy(source[i]));
}
} else {
+ var h = destination.$$hashKey;
forEach(destination, function(value, key){
delete destination[key];
});
for ( var key in source) {
destination[key] = copy(source[key]);
}
+ setHashKey(destination,h);
}
}
return destination;