我的技术堆栈是 -
我在做什么:
我正在进行CRUD(创建,读取,更新和删除)
的项目列表我的目标是在没有页面重新加载的情况下实现实时数据操作。
这在Chrome中运行良好。 但是,IE无法检测到模型更改。它在添加/更新/删除(从其缓存)之前继续显示数据。 只有在我手动清除缓存后,我才真正能够看到更改的模型。
需要有关如何使用IE8及更高版本解决此问题的帮助。
P.S。我已经尝试过设置元标题
答案 0 :(得分:5)
您可以设置
“服务器端响应的无缓存标头”
var AppInfrastructure = angular.module('App.Infrastructure', []);
并且在Angularjs中你可以编写拦截器,下面是示例代码:
AppInfrastructure
.config(function ($httpProvider) {
$httpProvider.requestInterceptors.push('httpRequestInterceptorCacheBuster');
})
.factory('httpRequestInterceptorCacheBuster', function () {
return function (promise) {
return promise.then(function (request) {
if (request.method === 'GET') {
var sep = request.url.indexOf('?') === -1 ? '?' : '&';
request.url = request.url + sep + 'cacheSlayer=' + new Date().getTime();
}
return request;
});
};
});
答案 1 :(得分:5)
与上面提到的Jquery Guru相同,但它是更新版本的angular
中的配置.factory('noCacheInterceptor', function () {
return {
request: function (config) {
console.log(config.method);
console.log(config.url);
if(config.method=='GET'){
var separator = config.url.indexOf('?') === -1 ? '?' : '&';
config.url = config.url+separator+'noCache=' + new Date().getTime();
}
console.log(config.method);
console.log(config.url);
return config;
}
};
});
验证后应删除console.logs
答案 2 :(得分:1)
无论如何,我决定与世界其他地方分享我的发现,所以也许可以节省一些时间。
我尝试将上面的代码1实现为1 ...我遇到的第一个明显的问题是传递给promise的请求参数内部的对象结构与上面显示的不同,以获得。方法和.url我需要先进入.config。所以它是request.config.method。
但这不是主要问题,我的问题是即使在实现这个之后,调用的最终url也没有附加此cacheSlayer。
我的解决方案:)在创建传入的$资源时(网址,附加设置,方法)。在我传入{'cacheSlayer':new Date()。getTime()}的其他设置中,这样就开始将它添加到我的资源url中。
希望这有帮助