diff options
Diffstat (limited to 'src/ngResource/resource.js')
| -rw-r--r-- | src/ngResource/resource.js | 25 | 
1 files changed, 22 insertions, 3 deletions
| diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index e2499864..8e63c4e8 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -25,6 +25,25 @@ function lookupDottedPath(obj, path) {  }  /** + * Create a shallow copy of an object and clear other fields from the destination + */ +function shallowClearAndCopy(src, dst) { +  dst = dst || {}; + +  angular.forEach(dst, function(value, key){ +    delete dst[key]; +  }); + +  for (var key in src) { +    if (src.hasOwnProperty(key) && key.substr(0, 2) !== '$$') { +      dst[key] = src[key]; +    } +  } + +  return dst; +} + +/**   * @ngdoc overview   * @name ngResource   * @description @@ -393,7 +412,7 @@ angular.module('ngResource', ['ng']).        }        function Resource(value){ -        copy(value || {}, this); +        shallowClearAndCopy(value || {}, this);        }        forEach(actions, function(action, name) { @@ -465,7 +484,7 @@ angular.module('ngResource', ['ng']).              if (data) {                // Need to convert action.isArray to boolean in case it is undefined                // jshint -W018 -              if ( angular.isArray(data) !== (!!action.isArray) ) { +              if (angular.isArray(data) !== (!!action.isArray)) {                  throw $resourceMinErr('badcfg', 'Error in resource configuration. Expected ' +                    'response to contain an {0} but got an {1}',                    action.isArray?'array':'object', angular.isArray(data)?'array':'object'); @@ -477,7 +496,7 @@ angular.module('ngResource', ['ng']).                    value.push(new Resource(item));                  });                } else { -                copy(data, value); +                shallowClearAndCopy(data, value);                  value.$promise = promise;                }              } | 
