Saya punya masalah dengan caching parsial di AngularJS.
Di halaman HTML saya, saya punya:
<body>
<div ng-view></div>
<body>
di mana sebagian saya dimuat.
Ketika saya mengubah kode HTML di sebagian saya, browser masih memuat data lama.
Apakah ada solusi?
caching
angularjs
browser-cache
Mennion
sumber
sumber
app.config.update(SEND_FILE_MAX_AGE_DEFAULT=0)
keflask_app.py
. (Saya membayangkan hal serupa ada untuk server web lain).Ctrl+Shift+R
(mis. Hard Reload) dan tidak peduli mekanisme caching apa yang digunakan chrome akan mengabaikannya dan mengambil kembali semua skrip, stylesheet dll.ng-include
|ng-view
|templateUrl
tidak ditangani oleh pintasan iniJawaban:
Untuk Pengembangan, Anda juga dapat menonaktifkan cache browser - Di Alat Dev Chrome di klik kanan bawah roda gigi dan centang opsi
Pembaruan: Di Firefox ada opsi yang sama di Debugger -> Pengaturan -> Bagian Lanjutan (diperiksa untuk Versi 33)
Pembaruan 2: Meskipun opsi ini muncul di Firefox, beberapa laporan tidak berfungsi. Saya sarankan menggunakan pembakar dan mengikuti jawaban hadaytullah.
sumber
Membangun sedikit jawaban atas @ Valentyn, inilah salah satu cara untuk selalu membersihkan cache secara otomatis setiap kali konten tampilan-ng berubah:
sumber
Seperti disebutkan dalam jawaban lain, di sini dan di sini , cache dapat dihapus dengan menggunakan:
Namun seperti yang disarankan oleh gatoatigrado dalam komentar , ini hanya berfungsi jika template html disajikan tanpa header cache.
Jadi ini bekerja untuk saya:
Dalam sudut:
Anda mungkin menambahkan header cache dalam berbagai cara tetapi di sini ada beberapa solusi yang cocok untuk saya.
Jika menggunakan
IIS
, tambahkan ini ke web.config Anda:Jika menggunakan Nginx, Anda dapat menambahkan ini ke konfigurasi Anda:
Edit
Saya baru menyadari bahwa
dev
mesin yang disebutkan pertanyaan tetapi semoga ini masih dapat membantu seseorang ...sumber
Jika Anda berbicara tentang cache yang digunakan untuk cache template tanpa memuat ulang seluruh halaman, maka Anda dapat mengosongkannya dengan sesuatu seperti:
Dan di markup:
<button ng-click='clearCache()'>Clear cache</button>
Dan tekan tombol ini untuk menghapus cache.
sumber
Solusi Untuk Firefox (33.1.1) menggunakan Firebug (22.0.6)
sumber
Cuplikan ini membantu saya menyingkirkan caching template
Detail cuplikan berikut dapat ditemukan di tautan ini: http://oncodesign.io/2014/02/19/safely-prevent-template-caching-in-angularjs/
sumber
if (!current) { return; }
Saya memposting ini hanya untuk menutup semua kemungkinan karena tidak ada solusi lain yang bekerja untuk saya (mereka melemparkan kesalahan karena dependensi templat angular-bootstrap, antara lain).
Saat Anda mengembangkan / men-debug templat tertentu, Anda dapat memastikannya selalu menyegarkan dengan menyertakan stempel waktu di jalur, seperti ini:
Perhatikan final
?nd=' + Date.now()
dalamtemplateUrl
variabel.sumber
.value('DEBUG', true)
untuk mengaktifkan garis itu atau tidak..run(function($rootScope) { $rootScope.DEBUG = true; ...
dan kemudian dalam direktif menyuntikkan yang $ rootScope seperti.directive('filter', ['$rootScope', function($rootScope)...
dan objek-properti kembali:templateUrl: '/app/components/filter/filter-template.html' + ($rootScope.DEBUG ? '?n=' + Date.now() : '')
. Mungkin Anda bisa menguraikan pendekatan .value ('DEBUG' Anda, benar)? Terpilih!.value('DEBUG', true
sama seperti yang Anda lakukan dengan$rootScope
, tetapi tanpa mengacaukannya :) Anda kemudian dapat menyuntikkanDEBUG
ke controller dan permintaan sebagai layanan normal..value(...)
, jika itu tidak terlalu canggih? Saya kira konsep di belakang adalah praktik terbaik sudut yang tidak saya ketahui.Seperti yang orang lain katakan, mengalahkan caching sepenuhnya untuk tujuan dev dapat dilakukan dengan mudah tanpa mengubah kode: gunakan pengaturan browser atau plugin. Di luar dev, untuk mengalahkan cache template Sudut dari template berbasis rute, hapus URL template dari cache selama $ routeChangeStart (atau $ stateChangeStart, untuk Router UI) seperti yang ditunjukkan Shayan. Namun, itu TIDAK mempengaruhi cache template yang dimuat oleh ng-include, karena template itu tidak dimuat melalui router.
Saya ingin dapat memperbaiki hotfix semua templat, termasuk yang dimuat oleh ng-include, dalam produksi dan membuat pengguna menerima hotfix di browser mereka dengan cepat, tanpa harus memuat ulang seluruh halaman. Saya juga tidak khawatir tentang mengalahkan cache HTTP untuk templat. Solusinya adalah dengan mencegat setiap permintaan HTTP yang dibuat aplikasi, abaikan permintaan yang bukan untuk templat .html aplikasi saya, lalu tambahkan param ke URL templat yang berubah setiap menit. Perhatikan bahwa pemeriksaan jalur khusus untuk jalur templat aplikasi Anda. Untuk mendapatkan interval yang berbeda, ubah matematika untuk param, atau hapus% sepenuhnya untuk tidak mendapatkan caching.
sumber
Jika Anda menggunakan router UI maka Anda dapat menggunakan dekorator dan memperbarui layanan $ templateFactory dan menambahkan parameter string kueri ke templateUrl, dan browser akan selalu memuat template baru dari server.
Saya yakin Anda dapat mencapai hasil yang sama dengan mendekorasi metode "kapan" di $ routeProvider.
sumber
Saya menemukan bahwa metode interseptor HTTP berfungsi dengan baik, dan memungkinkan fleksibilitas & kontrol tambahan. Selain itu, Anda dapat cache-bust untuk setiap rilis produksi dengan menggunakan hash rilis sebagai variabel buster.
Berikut adalah bagaimana metode cachebusting dev terlihat seperti menggunakan
Date
.sumber
Berikut adalah opsi lain di Chrome.
Hit F12untuk membuka alat pengembang. Lalu Sumber Daya > Penyimpanan Tembolok > Segarkan Ulang Tembolok .
Saya suka opsi ini karena saya tidak harus menonaktifkan cache seperti pada jawaban lain.
sumber
Tidak ada solusi untuk mencegah cache browser / proxy karena Anda tidak dapat memiliki kontrol di atasnya.
Cara lain untuk memaksa konten baru kepada pengguna Anda untuk mengubah nama file HTML! Persis seperti https://www.npmjs.com/package/grunt-filerev lakukan untuk aset.
sumber
Refresh dokumen setiap 30 detik:
Atribut HTML http-equiv w3schools
sumber