#angularjs #кэширование
Доброго времени суток. Столкнулся с такой проблемой с кэшированием. Сначала я проверяю есть ли данные в кэше, если да, то достаю их оттуда и заношу в scope контроллера, если нет, то гружу их с сервера. Так вот, если данные уже занесены в кэш и я где-то изменю данные через ng-model в $scope.players, то они также обновятся и в кэше. Почему так происходит? Ведь нигде явно не прописано mycache.put("players", newVals) var mycache = $cacheFactory.get("myCache"); $scope.players = mycache.get("players"); if (!$scope.players) { $http.get("test.php").success(function(response) { mycache.put("players", response); $scope.players = response; }); } И еще вопрос. Можно ли как-нибудь получить доступ к данным в mycache через mycahe.get(), которые кэшируются неявно, вот таким способом: var mycache = $cacheFactory.get("myCache"); $http.get("test.php", { cache: mycache }).success(function(response) { $scope.players = response; });
Ответы
Ответ 1
Для объяснения, посмотрите на этот jsfiddle В кэше мы сохраним объект response, тот же самый объект, на который $scope.players ссылается. Поэтому, когда обновляем $scope.players, обновляем одновременно то, что в кэше. Функция put из $cacheFactory выглядит вот так: put: function(key, value) { [...] if (!(key in data)) size++; data[key] = value; // <-- Нету копия объекта [...] return value; } Кстати говоря, функция put возвращает value, поэтому можете заменять: mycache.put("players", response); $scope.players = response; со следующим: $scope.players = mycache.put("players", response); Можно ли как-нибудь получить доступ к данным в mycache Если вы хотите узнать всё, что в кэше, есть возможность использовать функцию info(), которая возвращает что-то в этом роде: {"id": "myCache", "size": 1}
Комментариев нет:
Отправить комментарий