【发布时间】:2015-07-05 02:54:53
【问题描述】:
正如here 所讨论的那样,IE 在使用 ajax(即 $route 和 $http)时缓存内容很糟糕。可以在here 找到解决此问题的绝妙方法。
我们在我们的网站上使用 许多 Angular 应用程序,因此为了确保其他开发其他 Angular 应用程序的开发人员不会出现缓存问题,我想添加上述建议的解决方案当然,我们网站上的每个 Angular 应用程序。如果我们的样式指南包含以下内容,开发人员在构建自己的应用程序时更有可能包含它,并且可以成功避免非常危险的 IE 问题。毕竟,我认识的开发者已经不多了,积极使用 IE 进行开发。
var myApp = angular.module('myApp', ['ngRoute']);
myApp.config(['$routeProvider', '$httpProvider', function($routeProvider, $httpProvider) {
$httpProvider.defaults.cache = false;
if (!$httpProvider.defaults.headers.get) {
$httpProvider.defaults.headers.get = {};
}
// disable IE ajax request caching
$httpProvider.defaults.headers.get['If-Modified-Since'] = '0';
// routes go here...
}]);
此代码的作用是强制 IE 不缓存模板并为 $http 调用发出服务器请求,而不是从其缓存中提取结果(如果您的数据是动态的,这可能非常糟糕——它很可能是)。
为每个 Angular 应用程序添加上述代码的问题在于,该应用程序可能会将 ngRoute 注入到应用程序的依赖项中,也可能不会。如果 ngRoute 不存在,则会发生注入错误。
所以,问题是这样的:是否可以检查 Angular 中是否存在注入的依赖项?我希望能够执行以下操作:
var myapp = angular.module('ordersApp', [
'ngTouch',
'ngRoute',
'ngAnimate',
'myController'
]);
if(myapp.has_ngRoute) {
myapp.config(['$routeProvider', '$httpProvider', function($routeProvider, $httpProvider) {
$httpProvider.defaults.cache = false;
if (!$httpProvider.defaults.headers.get) {
$httpProvider.defaults.headers.get = {};
}
// disable IE ajax request caching
$httpProvider.defaults.headers.get['If-Modified-Since'] = '0';
// routes go here...
}]);
}
【问题讨论】:
标签: javascript ajax angularjs internet-explorer caching