У меня есть проблема с кэшированием партиалов в AngularJS.
На моей странице HTML у меня есть:
<body>
<div ng-view></div>
<body>
где загружены мои партиалы.
Когда я изменяю HTML-код в своей части, браузер по-прежнему загружает старые данные.
Есть ли обходной путь?
caching
angularjs
browser-cache
Mennion
источник
источник
app.config.update(SEND_FILE_MAX_AGE_DEFAULT=0)
в мойflask_app.py
. (Я думаю, что подобные вещи существуют для других веб-серверов).Ctrl+Shift+R
(т.е. Hard Reload), и независимо от того, какой механизм кэширования используется, chrome проигнорирует его и повторно загрузит все сценарии, таблицы стилей и т. Д.ng-include
|ng-view
|templateUrl
не обрабатываются этим ярлыкомОтветы:
Для разработки вы также можете отключить кеш браузера - в Chrome Dev Tools в правом нижнем углу нажмите на шестерню и отметьте опцию
Обновление: в Firefox есть такая же опция в Отладчике -> Настройки -> Расширенный раздел (проверено на Версии 33)
Обновление 2: хотя эта опция появляется в Firefox, в некоторых отчетах она не работает. Я предлагаю использовать firebug и следующий ответ hadaytullah.
источник
Опираясь на ответ @ Valentyn, вот один из способов всегда автоматически очищать кеш при каждом изменении содержимого ng-view:
источник
Как упоминалось в других ответах, здесь и здесь , кеш можно очистить с помощью:
Однако, как предложено gatoatigrado в комментарии , это работает, только если html-шаблон был предоставлен без заголовков кэша.
Так что это работает для меня:
В угловых:
Вы можете добавлять заголовки кеша различными способами, но вот несколько решений, которые работают для меня.
При использовании
IIS
добавьте это в ваш web.config:Если вы используете Nginx, вы можете добавить это в вашу конфигурацию:
редактировать
Я только что понял, что в вопросе упоминается
dev
машина, но, надеюсь, это еще может кому-нибудь помочь ...источник
Если вы говорите о кеше, который используется для кэширования шаблонов без перезагрузки всей страницы, то вы можете очистить его чем-то вроде:
И в разметке:
<button ng-click='clearCache()'>Clear cache</button>
И нажмите эту кнопку, чтобы очистить кэш.
источник
Решение для Firefox (33.1.1) с использованием Firebug (22.0.6)
источник
Этот фрагмент помог мне избавиться от кеширования шаблонов.
Подробности следующего фрагмента можно найти по этой ссылке: http://oncodesign.io/2014/02/19/safely-prevent-template-caching-in-angularjs/
источник
if (!current) { return; }
Я публикую это просто для того, чтобы охватить все возможности, так как ни одно из других решений не работало для меня (среди прочего, они выдавали ошибки из-за зависимостей шаблона angular-bootstrap).
Пока вы разрабатываете / отлаживаете определенный шаблон, вы можете убедиться, что он всегда обновляется, добавив в путь временную метку, например:
Обратите внимание на финал
?nd=' + Date.now()
вtemplateUrl
переменной.источник
.value('DEBUG', true)
чтобы включить эту строку или нет..run(function($rootScope) { $rootScope.DEBUG = true; ...
а затем в директиве впрыскивать $ rootScope , как.directive('filter', ['$rootScope', function($rootScope)...
и в возвращенном объекте-свойствах:templateUrl: '/app/components/filter/filter-template.html' + ($rootScope.DEBUG ? '?n=' + Date.now() : '')
. Может быть, вы могли бы разработать свой подход .value («DEBUG», правда)? Upvoted!.value('DEBUG', true
такое же, как и у вас$rootScope
, но без загромождения :) Позже вы можете внедритьDEBUG
в контроллер и запросить как обычный сервис..value(...)
нибудь, если это не слишком сложно? Я полагаю, что эта концепция представляет собой угловую лучшую практику, неизвестную мне.Как уже говорили другие, победить кеширование полностью для целей разработки можно легко, не меняя код: используйте настройки браузера или плагина. Вне dev, чтобы победить кэширование шаблонов Angular шаблонами на основе маршрутов, удалите URL шаблона из кэша во время $ routeChangeStart (или $ stateChangeStart для UI Router), как показал Шаян. Однако это НЕ влияет на кэширование шаблонов, загружаемых с помощью ng-include, поскольку эти шаблоны не загружаются через маршрутизатор.
Я хотел иметь возможность исправления любого шаблона, в том числе загруженного с помощью ng-include, в рабочем состоянии, и чтобы пользователи могли быстро получать исправления в своем браузере без необходимости перезагружать всю страницу. Я также не обеспокоен победой над HTTP-кэшированием шаблонов. Решение состоит в том, чтобы перехватывать каждый HTTP-запрос, который делает приложение, игнорировать те, которые не относятся к шаблонам .html моего приложения, а затем добавлять параметр в URL-адрес шаблона, который меняется каждую минуту. Обратите внимание, что проверка пути зависит от пути шаблонов вашего приложения. Чтобы получить другой интервал, измените математику для параметра или полностью удалите%, чтобы не кэшировать.
источник
Если вы используете UI-маршрутизатор, вы можете использовать декоратор и обновить службу $ templateFactory и добавить параметр строки запроса в templateUrl, и браузер всегда будет загружать новый шаблон с сервера.
Я уверен, что вы можете достичь того же результата, украшая метод «когда» в $ routeProvider.
источник
Я обнаружил, что метод перехватчика HTTP работает довольно хорошо, и обеспечивает дополнительную гибкость и контроль. Кроме того, вы можете кэшировать ошибки для каждого производственного выпуска, используя хэш выпуска в качестве переменной buster.
Вот как выглядит метод dev cachebusting
Date
.источник
Вот еще один вариант в Chrome.
Нажмите, F12чтобы открыть инструменты разработчика. Затем Ресурсы > Хранилище кэша > Обновить кэши .
Мне нравится эта опция, потому что мне не нужно отключать кеш, как в других ответах.
источник
Не существует решения для предотвращения кэширования браузера / прокси, так как вы не можете контролировать его.
Другой способ заставить свежий контент для ваших пользователей это переименовать файл HTML! Точно так же, как https://www.npmjs.com/package/grunt-filerev делает для активов.
источник
Обновлять документ каждые 30 секунд:
w3schools HTML http-эквивалент атрибут
источник