Mam problem z buforowaniem części w AngularJS.
Na mojej stronie HTML mam:
<body>
<div ng-view></div>
<body>
gdzie są ładowane moje częściowe.
Kiedy zmieniam kod HTML w częściowym, przeglądarka nadal ładuje stare dane.
Czy istnieje jakieś obejście?
caching
angularjs
browser-cache
Mennion
źródło
źródło
app.config.update(SEND_FILE_MAX_AGE_DEFAULT=0)
do mojegoflask_app.py
. (Wyobrażam sobie, że podobne rzeczy istnieją w przypadku innych serwerów sieciowych).Ctrl+Shift+R
(tj. Hard Reload) i bez względu na to, jaki mechanizm buforowania zostanie użyty, chrome zignoruje go i ponownie pobierze wszystkie skrypty, arkusze stylów itp.ng-include
|ng-view
|templateUrl
skrót nie jest obsługiwanyOdpowiedzi:
Dla programistów możesz także dezaktywować pamięć podręczną przeglądarki - w Chrome Dev Tools w prawym dolnym rogu kliknij koło zębate i zaznacz opcję
Aktualizacja: W przeglądarce Firefox dostępna jest ta sama opcja w Debuggerze -> Ustawienia -> Sekcja zaawansowana (zaznaczona dla wersji 33)
Aktualizacja 2: Chociaż ta opcja pojawia się w Firefoksie, niektóre raporty nie działają. Sugeruję użycie firebuga i skorzystanie z odpowiedzi hadaytullah.
źródło
Opierając się nieco na odpowiedzi @ Valentyn, oto jeden ze sposobów automatycznego czyszczenia pamięci podręcznej za każdym razem, gdy zmienia się zawartość widoku ng:
źródło
Jak wspomniano w innych odpowiedziach, tu i tutaj pamięć podręczną można wyczyścić za pomocą:
Jednak, jak sugeruje gatoatigrado w komentarzu , wydaje się, że działa to tylko wtedy, gdy szablon HTML był wyświetlany bez nagłówków pamięci podręcznej.
Więc to działa dla mnie:
Kątowe:
Możesz dodawać nagłówki pamięci podręcznej na różne sposoby, ale oto kilka rozwiązań, które działają dla mnie.
Jeśli używasz
IIS
, dodaj to do swojego web.config:Jeśli używasz Nginx, możesz dodać to do swojej konfiguracji:
Edytować
Właśnie zdałem sobie sprawę, że pytanie dotyczy
dev
maszyny, ale mam nadzieję, że nadal może to komuś pomóc ...źródło
Jeśli mówisz o pamięci podręcznej używanej do buforowania szablonów bez ponownego ładowania całej strony, możesz ją opróżnić przez:
I w znacznikach:
<button ng-click='clearCache()'>Clear cache</button>
I naciśnij ten przycisk, aby wyczyścić pamięć podręczną.
źródło
Rozwiązanie dla Firefoksa (33.1.1) za pomocą Firebug (22.0.6)
źródło
Ten fragment pomógł mi pozbyć się buforowania szablonów
Szczegóły następującego fragmentu kodu można znaleźć pod tym linkiem: http://oncodesign.io/2014/02/19/safely-prevent-template-caching-in-angularjs/
źródło
if (!current) { return; }
Zamieszczam to po to, aby omówić wszystkie możliwości, ponieważ żadne inne rozwiązanie nie działało dla mnie (powodowały błędy między innymi z powodu zależności między szablonami angular-bootstrap).
Podczas opracowywania / debugowania określonego szablonu możesz upewnić się, że zawsze się odświeża, dołączając znacznik czasu do ścieżki, jak poniżej:
Uwaga końcowy
?nd=' + Date.now()
wtemplateUrl
zmiennej.źródło
.value('DEBUG', true)
aby włączyć tę linię lub nie..run(function($rootScope) { $rootScope.DEBUG = true; ...
, a następnie w ramach dyrektywy wstrzyknąć $ rootScope jak.directive('filter', ['$rootScope', function($rootScope)...
iw zwrócony obiekt-obiekt:templateUrl: '/app/components/filter/filter-template.html' + ($rootScope.DEBUG ? '?n=' + Date.now() : '')
. Może mógłbyś rozwinąć swoje podejście .value („DEBUG”, prawda)? Pozytywne!.value('DEBUG', true
jest takie samo, jak w przypadku$rootScope
, ale bez bałaganu :) Możesz później wstrzyknąćDEBUG
do kontrolera i wysłać zapytanie jako normalną usługę..value(...)
, co nie jest zbyt skomplikowane? Przypuszczam, że ta koncepcja to najlepsza praktyka kątowa nieznana mi.Jak powiedzieli inni, całkowite pokonanie buforowania dla celów programistycznych można łatwo zrobić bez zmiany kodu: użyj ustawień przeglądarki lub wtyczki. Poza dev, aby pokonać buforowanie szablonów kątowych szablonów opartych na trasach, usuń adres URL szablonu z pamięci podręcznej podczas $ routeChangeStart (lub $ stateChangeStart, dla interfejsu użytkownika routera), jak pokazał Shayan. Nie wpływa to jednak na buforowanie szablonów ładowanych przez ng-include, ponieważ szablony te nie są ładowane przez router.
Chciałem być w stanie naprawić dowolny szablon, w tym te ładowane przez ng-include, w produkcji i umożliwić użytkownikom szybkie otrzymywanie poprawki w przeglądarce bez konieczności ponownego ładowania całej strony. Nie przejmuję się również pokonaniem buforowania HTTP dla szablonów. Rozwiązaniem jest przechwycenie każdego żądania HTTP, które wysyła aplikacja, zignorowanie tych, które nie są dla szablonów .html mojej aplikacji, a następnie dodanie parametru do adresu URL szablonu, który zmienia się co minutę. Pamiętaj, że sprawdzanie ścieżki jest specyficzne dla ścieżki szablonów aplikacji. Aby uzyskać inny interwał, zmień matematykę parametru lub usuń% całkowicie, aby nie buforować.
źródło
Jeśli używasz routera interfejsu użytkownika, możesz użyć dekoratora i zaktualizować usługę $ templateFactory oraz dołączyć parametr ciągu zapytania do templateUrl, a przeglądarka zawsze załaduje nowy szablon z serwera.
Jestem pewien, że możesz osiągnąć ten sam wynik, dekorując metodę „when” w $ routeProvider.
źródło
Odkryłem, że metoda przechwytująca HTTP działa całkiem nieźle i zapewnia dodatkową elastyczność i kontrolę. Dodatkowo możesz pomijać pamięć podręczną dla każdej wersji produkcyjnej, używając skrótu wersji jako zmiennej buster.
Oto jak wygląda metoda buforowania deweloperów przy użyciu
Date
.źródło
Oto kolejna opcja w Chrome.
Hit, F12aby otworzyć narzędzia programistyczne. Następnie Zasoby > Pamięć podręczna > Odśwież pamięć podręczną .
Podoba mi się ta opcja, ponieważ nie muszę wyłączać pamięci podręcznej, jak w przypadku innych odpowiedzi.
źródło
Nie ma rozwiązania, które zapobiegałoby buforowaniu przeglądarki / proxy, ponieważ nie można mieć nad tym kontroli.
Innym sposobem na wymuszenie świeżej zawartości dla użytkowników, aby zmienić nazwę pliku HTML! Dokładnie tak jak https://www.npmjs.com/package/grunt-filerev dla zasobów.
źródło
Odśwież dokument co 30 sekund:
w3schools HTML http-equiv Atrybut
źródło