我在AngularJS中缓存部分有问题。
在我的HTML页面,我有:
<body>
<div ng-view></div>
<body>
我的偏导数被载入的地方。
当我改变HTML代码在我的部分,浏览器仍然加载旧数据。
有什么解决办法吗?
我在AngularJS中缓存部分有问题。
在我的HTML页面,我有:
<body>
<div ng-view></div>
<body>
我的偏导数被载入的地方。
当我改变HTML代码在我的部分,浏览器仍然加载旧数据。
有什么解决办法吗?
当前回答
Firefox(33.1.1)使用Firebug(22.0.6)的解决方案
工具> Web-Tools > Firebug > Firebug。 在Firebug视图中转到“Net”视图。 一个下拉菜单符号将出现在“Net”(视图的标题)旁边。 从下拉菜单中选择“禁用浏览器缓存”。
其他回答
Firefox(33.1.1)使用Firebug(22.0.6)的解决方案
工具> Web-Tools > Firebug > Firebug。 在Firebug视图中转到“Net”视图。 一个下拉菜单符号将出现在“Net”(视图的标题)旁边。 从下拉菜单中选择“禁用浏览器缓存”。
如果你正在使用UI路由器,那么你可以使用装饰器和更新$templateFactory服务,并将查询字符串参数附加到templateUrl,浏览器将始终从服务器加载新模板。
function configureTemplateFactory($provide) {
// Set a suffix outside the decorator function
var cacheBust = Date.now().toString();
function templateFactoryDecorator($delegate) {
var fromUrl = angular.bind($delegate, $delegate.fromUrl);
$delegate.fromUrl = function (url, params) {
if (url !== null && angular.isDefined(url) && angular.isString(url)) {
url += (url.indexOf("?") === -1 ? "?" : "&");
url += "v=" + cacheBust;
}
return fromUrl(url, params);
};
return $delegate;
}
$provide.decorator('$templateFactory', ['$delegate', templateFactoryDecorator]);
}
app.config(['$provide', configureTemplateFactory]);
我相信你可以通过装饰$routeProvider中的"when"方法来达到同样的效果。
在@Valentyn回答的基础上,这里有一种方法可以在ng-view内容发生变化时自动清除缓存:
myApp.run(function($rootScope, $templateCache) {
$rootScope.$on('$viewContentLoaded', function() {
$templateCache.removeAll();
});
});
对于开发,你也可以停用浏览器缓存-在Chrome开发工具右下角点击齿轮,并勾选选项
禁用缓存(当DevTools打开时)
更新:在Firefox中有相同的选项调试器->设置->高级部分(选中版本33)
更新2:虽然这个选项出现在Firefox一些报告,它不工作。我建议使用firebug并遵循hadaytullah的回答。
如果你谈论的是用于模板缓存而不需要重新加载整个页面的缓存,那么你可以通过如下方式清空它:
.controller('mainCtrl', function($scope, $templateCache) {
$scope.clearCache = function() {
$templateCache.removeAll();
}
});
在标记中:
<巴顿ngk -click=“clearCache()”>清廉缓存</按钮>
并按此按钮清除缓存。