Я использую услугу для обмена данными между контроллерами. Тем не менее, служба возвращает обещание с кэшированными данными даже при создании новых запросов. В зависимости от того, где создается экземпляр defer
, возвращаются живые данные, но двусторонние перерывы привязки или двусторонняя привязка работают, но возвращаются кэшированные данные.Предотвращение отклонения выражения AngularJS с кэшированными данными
Как можно предотвратить возврат обещания с кешированными данными и сохранить двустороннюю привязку?
Я мириться plunker, чтобы проиллюстрировать случай: http://plnkr.co/edit/SyBvUu?p=preview и для полноты картины, вот служба Назойливые:
app.service('myService', function($http, $q) {
// When instancing deferred here two way binding works but cached data is returned
var deferred = $q.defer();
this.get = function(userId) {
// When instancing deferred here two way binding breaks but live data is returned
//var deferred = $q.defer();
console.log('Fetch data again using id ', userId);
var url = userId + '.json';
$http.get(url, {timeout: 30000, cache: false})
.success(function(data, status, headers, config) {
deferred.resolve(data, status, headers, config);
})
.error(function(data, status, headers, config) {
deferred.reject(data, status, headers, config);
});
return deferred.promise;
};
});
UPDATE: Проблема не в том, что данные в кэше, это было что я не понял, как должны делиться данные и что общие данные не могут быть примитивными. См. Мой собственный ответ ниже.
Хм, только для спорта - это происходит, если вы 'вар URL = USERID + + Date.now();' "JSON cacheBreaker =.?"? –
Да, я пробовал этот путь раньше, но безрезультатно. При запросе на различные json-файлы возвращаемый ответ содержит ожидаемые пользовательские данные. –