Description
This took some research to track down, but I'm pretty sure the mout
deepMixin
functionality has a flaw when copying nested objects. It's in this function here:
function copyProp(val, key) {
var existing = this[key];
if (isPlainObject(val) && isPlainObject(existing)) {
deepMixIn(existing, val);
} else {
this[key] = val;
}
}
In this function, this
is the target object, and val
is coming from the source object. The issue is that it only recursively processes nested objects if the key already exists on the target object. Otherwise, it simply stores a reference.
So what happens is the previousAttributes
object is actually made of references to nested children. So, if you update a value on that nested child, it won't see it as a change (because the nested object is a literal reference).
I don't know if the right fix is to fix it on mout
, which could have adverse affects for anyone using the library, or replace deepMixin
with the existing angular.copy
function, which already performs the required action without the extra dependency.
Edit: There is one difference between the functions, angular.copy only copies one item onto one destination, while deepMixin
accepts multiple objects, if that matters.