我正在使用一项服务来在控制器之间共享数据。但是,即使在发出新请求时,该服务也会返回带有缓存数据的承诺。根据defer
创建实例的位置,要么返回实时数据但双向绑定中断,要么双向绑定有效但返回缓存数据。
如何防止返回带有缓存数据的承诺并保持双向绑定?
我已经提出了一个 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;
};
});
更新:问题不在于数据被缓存,而在于我不了解如何共享数据并且共享数据不能是原始数据。请参阅下面我自己的答案。