簡體   English   中英

避免將AngularJS部分視圖緩存在IE中

[英]Avoid angularJS partial views to be cached in IE

我正在開發也具有一些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"
});

現在,我需要的是至少在開發過程中不緩存這些局部視圖。 為此,我使用了這里提供的方法:

myApp.run(function($rootScope, $templateCache) {
   $rootScope.$on('$viewContentLoaded', function() {
      $templateCache.removeAll();
   });
});

除了Internet Explorer(Internet Explorer)外,這非常完美,即使在按Ctrl + F5時,Internet Explorer始終將加載緩存的版本。

另外,我嘗試在布局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" />

但這沒有用。

所以我的問題是是否有任何方法可以避免這種行為。

我找到了我真正需要的解決方法。 向路由添加版本號,如下所示:

$routeProvider.when("/search", {
    templateUrl: "/Scripts/app/views/search.html" + version
});

其中版本是一個字符串,如: ?v1.0.0

這樣,無論何時我進行更改,我都只需更改版本號,然后在單擊該頁面時,將再次下載部分視圖。

在web.config中使用以下標記禁用緩存

   <staticContent>
       <clientCache cacheControlMode="DisableCache" />
    </staticContent>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM