我正在开发一个也有一些angularJS的ASP.NET MVC应用程序。我有一个主页面有不同的标签,当你点击它们时,他们加载一个角度局部视图。这就是主页面的样子:
{ ... }
<div class="widget-div" ng-controller="mainController">
<div class="widget-body">
<div class="tabs-left">
<ul id="demo-pill-nav" class="nav nav-tabs tabs-left" style="width: 160px">
<li ng-class="getMenuClass('/search')">
<a href="javascript:void(0);" ng-click="selectPage('search')">Search</a>
</li>
<li ng-class="getMenuClass('/addressVerification')">
<a href="javascript:void(0);" ng-click="selectPage('addressVerification')">Address Verification</a>
</li>
<li ng-class="getMenuClass('/dashboard')">
<a href="javascript:void(0);" ng-click="selectPage('dashboard')">Dashboard</a>
</li>
<li ng-class="getMenuClass('/editProfile')">
<a href="javascript:void(0);" ng-click="selectPage('editProfile')">Update Profile</a>
</li>
</ul>
<div class="tab-content">
<div class="active tab-pane">
<ng:view />
</div>
</div>
</div>
</div>
</div>
{ ... }
在主控制器中,selectPage方法如下所示:
$scope.selectPage = function (page) {
//not relevant code removed here
$location.path("/" + page);
};
当然,我已经定义了以下路线:
$routeProvider.when("/search", {
templateUrl: "/Scripts/app/views/search.html"
});
现在,我需要的是这些部分视图不会被缓存,至少在开发过程中。为此,我使用了here提供的方法:
myApp.run(function($rootScope, $templateCache) {
$rootScope.$on('$viewContentLoaded', function() {
$templateCache.removeAll();
});
});
除了Internet Explorer之外,它的工作非常完美,即使按Ctrl + F5也会加载缓存版本。
另外,我尝试在布局html中设置HTTP标头,如下所示:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
但那不起作用。
所以我的问题是,是否有任何方法可以避免这种行为。
答案 0 :(得分:4)
我找到了一个正是我需要的解决方法。在路径中添加版本号,如下所示:
$routeProvider.when("/search", {
templateUrl: "/Scripts/app/views/search.html" + version
});
其中version是一个字符串,如:?v1.0.0
这样,只要我做出更改,我只需更改版本号,当点击该页面时,将再次下载部分视图。
答案 1 :(得分:-1)
在web.config中使用以下标记来禁用缓存
<staticContent>
<clientCache cacheControlMode="DisableCache" />
</staticContent>