Не должен ли $cacheFactory#get() возвращать копию кэшированного объекта вместо ссылки?

Я столкнулся с ситуацией, которую я не ожидал при использовании $cacheFactoryне должны объекты, хранящиеся в кеше, не подвергаться изменениям вне $cacheFactory, означает, что объект, возвращаемый из кэша с использованием $cacheFactory.get(), не должен отражать изменения обратно в текущий кэшированный объект.

У меня есть демонстрация: http://jsfiddle.net/vladimir_ze/s9twdbup/

1 ответ

// get model from cache and modify it
$scope.modelFromCache = cache.get('model');
$scope.modelFromCache.author.name = 'Bob';

// Telling you're right and instead of copy you get a reference
console.log($scope.modelFromCache === cache.get('model')); // true

$scope.anotherModelFromCache = angular.copy(cache.get('model')); 

// Solution if you just want a copy of cache property data
console.log($scope.anotherModelFromCache === cache.get('model')); // false

Я думаю, что вы правы, и это поведение должно быть ясно, потому что

Извлекает именованные данные, хранящиеся в объекте Cache.

это вводит в заблуждение...

Ссылка https://docs.angularjs.org/api/ng/type/$ cacheFactory.Cache

Хороший улов кстати:)

Другие вопросы по тегам