2015-10-06 11 views
9

デプロイメント後にユーザーに私のAngularアプリの最新バージョンが表示されるようにしたい。その場合、テンプレートキャッシュをクリアする正しい戦略は何ですか?デプロイメント後にテンプレートキャッシュを消去する

私はどこかで$templateCache.removeAll()app.runに読み込んでいますが、これでキャッシュが完全に無効になると思いますか?

答えて

9

インターセプタを作成してすべてのテンプレートリクエストを「キャッチ」する必要があります。このインターセプタで、テンプレートアセットのバージョンを指定するURLパラメータを追加できるはずです。

例:

// App .config() 
$httpProvider.interceptors.push(function($templateCache) { 
    return { 
    'request' : function(request) { 
     if($templateCache.get(request.url) === undefined) { // cache miss 
      // Item is not in $templateCache so add our query string 
      request.url = request.url + '?appVersion=' + appService.getConfig().version; 
     } 
     return request; 
    } 
}; 

もちろん、このアプリの設定にあなたがあなたの新しいバージョン(ビルドタスクを経由して、あなたがこのファイルを自動的に更新することができます)を展開するたびに更新する必要があります。 URLパスが '.html'で終わっているかどうかを比較するなどのチェックを追加する必要があるため、実際のHTTPリクエストを強くしていないと確信できます。

このアプローチの下位は、更新されていないテンプレートがあり、ブラウザのキャッシュをゴミ箱に入れたくない場合があります。これが当てはまる場合は、それぞれにいくつかのmd5(templateContent)を追加する必要があります---これはGrunt/Gulpを経由してビルド時に達成できます。

+1

'if(request.url.endsWith("。html ")){...}'チェックを追加するだけで、魅力的に動作します!私はこの問題のために多くのソリューションを試しましたが、これは私のユースケースに最適です。 – hmartos

+0

@hmartos注意してください.endendsは、すべてのブラウザとプラットフォームでうまくサポートされていません。 – tuks

関連する問題