Skip to content

Commit e4707d3

Browse files
committed
fix: use angular.copy before storing values
It should prevent the copy of angular properties such as $$hashKey Fixes scotttrinh#29
1 parent a26f24a commit e4707d3

File tree

3 files changed

+17
-37
lines changed

3 files changed

+17
-37
lines changed

dist/angular-localForage.js

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -81,29 +81,19 @@
8181
// Directly adds a value to storage
8282
var setItem = function(key, value) {
8383
var deferred = $q.defer(),
84-
args = arguments;
85-
86-
//avoid $promises attributes from value objects, if is there.
87-
if (angular.isObject(value) && angular.isDefined(value.$promise)) {
88-
delete value.$promise; //delete attribut from object structure.
89-
}
84+
args = arguments,
85+
localCopy = angular.copy(value);
9086

91-
//avoid $$hashKey attributes from value arrays, if is there.
92-
if (angular.isArray(value)) {
93-
angular.forEach(value, function(subvalue, key){
94-
if (angular.isDefined(subvalue.$$hashKey)) {
95-
if (key === 0) {
96-
value = angular.fromJson(angular.toJson(value));
97-
}
98-
}
99-
});
87+
//avoid $promises attributes from value objects, if present.
88+
if (angular.isObject(localCopy) && angular.isDefined(localCopy.$promise)) {
89+
delete localCopy.$promise; //delete attribut from object structure.
10090
}
10191

102-
localforage.setItem(prefix() + key, value).then(function success() {
92+
localforage.setItem(prefix() + key, localCopy).then(function success() {
10393
if(notify.setItem) {
104-
$rootScope.$broadcast('LocalForageModule.setItem', {key: key, newvalue: value, driver: localforage.driver()});
94+
$rootScope.$broadcast('LocalForageModule.setItem', {key: key, newvalue: localCopy, driver: localforage.driver()});
10595
}
106-
deferred.resolve(value);
96+
deferred.resolve(localCopy);
10797
}, function error(data) {
10898
onError(data, args, setItem, deferred);
10999
});

dist/angular-localForage.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/angular-localForage.js

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -74,29 +74,19 @@
7474
// Directly adds a value to storage
7575
var setItem = function(key, value) {
7676
var deferred = $q.defer(),
77-
args = arguments;
78-
79-
//avoid $promises attributes from value objects, if is there.
80-
if (angular.isObject(value) && angular.isDefined(value.$promise)) {
81-
delete value.$promise; //delete attribut from object structure.
82-
}
77+
args = arguments,
78+
localCopy = angular.copy(value);
8379

84-
//avoid $$hashKey attributes from value arrays, if is there.
85-
if (angular.isArray(value)) {
86-
angular.forEach(value, function(subvalue, key){
87-
if (angular.isDefined(subvalue.$$hashKey)) {
88-
if (key === 0) {
89-
value = angular.fromJson(angular.toJson(value));
90-
}
91-
}
92-
});
80+
//avoid $promises attributes from value objects, if present.
81+
if (angular.isObject(localCopy) && angular.isDefined(localCopy.$promise)) {
82+
delete localCopy.$promise; //delete attribut from object structure.
9383
}
9484

95-
localforage.setItem(prefix() + key, value).then(function success() {
85+
localforage.setItem(prefix() + key, localCopy).then(function success() {
9686
if(notify.setItem) {
97-
$rootScope.$broadcast('LocalForageModule.setItem', {key: key, newvalue: value, driver: localforage.driver()});
87+
$rootScope.$broadcast('LocalForageModule.setItem', {key: key, newvalue: localCopy, driver: localforage.driver()});
9888
}
99-
deferred.resolve(value);
89+
deferred.resolve(localCopy);
10090
}, function error(data) {
10191
onError(data, args, setItem, deferred);
10292
});

0 commit comments

Comments
 (0)