Tengo un problema con el almacenamiento en caché de parciales en AngularJS.
En mi página HTML tengo:
<body>
<div ng-view></div>
<body>
donde se cargan mis parciales
Cuando cambio el código HTML en mi parcial, el navegador aún carga datos antiguos.
¿Hay algún trabajo alrededor?
caching
angularjs
browser-cache
Mennion
fuente
fuente
app.config.update(SEND_FILE_MAX_AGE_DEFAULT=0)
a miflask_app.py
. (Me imagino que existen cosas similares para otros servidores web).Ctrl+Shift+R
(es decir, duro Recargar) y no importa lo que el almacenamiento en caché mecanismo se utiliza cromo lo ignorará y vuelva a recuperar todos los scripts, hojas de estilo, etc.ng-include
|ng-view
El |templateUrl
no son manejados por este atajoRespuestas:
Para el desarrollo, también puede desactivar la memoria caché del navegador: en Chrome Dev Tools en la parte inferior, haga clic con el botón derecho en el engranaje y marque la opción
Actualización: en Firefox hay la misma opción en Debugger -> Configuración -> Sección Avanzada (marcada para la Versión 33)
Actualización 2: aunque esta opción aparece en Firefox, algunos informan que no funciona. Sugiero usar firebug y seguir la respuesta de hadaytullah.
fuente
Basándose en la respuesta de @ Valentyn un poco, aquí hay una forma de borrar siempre automáticamente el caché cada vez que cambie el contenido de ng-view:
fuente
Como se menciona en las otras respuestas, aquí y aquí , el caché se puede borrar mediante el uso de:
Sin embargo, como lo sugiere gatoatigrado en el comentario , esto solo parece funcionar si la plantilla html se sirvió sin ningún encabezado de caché.
Entonces esto funciona para mí:
En angular:
Puede agregar encabezados de caché de varias maneras, pero aquí hay un par de soluciones que funcionan para mí.
Si usa
IIS
, agregue esto a su web.config:Si usa Nginx, puede agregar esto a su configuración:
Editar
Me acabo de dar cuenta de que la pregunta menciona la
dev
máquina, pero espero que esto pueda ayudar a alguien ...fuente
Si está hablando de caché que se ha utilizado para el almacenamiento en caché de plantillas sin volver a cargar toda la página, puede vaciarlo de la siguiente manera:
Y en marcado:
<button ng-click='clearCache()'>Clear cache</button>
Y presione este botón para borrar el caché.
fuente
Solución para Firefox (33.1.1) usando Firebug (22.0.6)
fuente
Este fragmento me ayudó a deshacerme del almacenamiento en caché de plantillas
Los detalles del siguiente fragmento se pueden encontrar en este enlace: http://oncodesign.io/2014/02/19/safely-prevent-template-caching-in-angularjs/
fuente
if (!current) { return; }
Estoy publicando esto solo para cubrir todas las posibilidades ya que ninguna de las otras soluciones funcionó para mí (arrojaron errores debido a dependencias de plantilla angular-bootstrap, entre otras).
Mientras desarrolla / depura una plantilla específica, puede asegurarse de que siempre se actualice al incluir una marca de tiempo en la ruta, como esta:
Tenga
?nd=' + Date.now()
en cuenta el final en latemplateUrl
variable.fuente
.value('DEBUG', true)
para habilitar esa línea o no..run(function($rootScope) { $rootScope.DEBUG = true; ...
y luego dentro de la directiva de la inyección del $ rootScope como.directive('filter', ['$rootScope', function($rootScope)...
y en el objeto de la propiedad devuelta:templateUrl: '/app/components/filter/filter-template.html' + ($rootScope.DEBUG ? '?n=' + Date.now() : '')
. ¿Tal vez podría elaborar su enfoque .value ('DEBUG', verdadero)? ¡Votado!.value('DEBUG', true
es el mismo que el que usó$rootScope
, pero sin abarrotarlo :) Posteriormente podría inyectarseDEBUG
en el controlador y consultar como un servicio normal..value(...)
cosita, si no es demasiado sofisticada? Supongo que el concepto detrás es una mejor práctica angular desconocida para mí.Como otros han dicho, derrotar el almacenamiento en caché por completo para fines de desarrollo se puede hacer fácilmente sin cambiar el código: use una configuración de navegador o un complemento. Fuera del desarrollador, para derrotar el almacenamiento en caché de plantillas angulares de plantillas basadas en rutas, elimine la URL de la plantilla del caché durante $ routeChangeStart (o $ stateChangeStart, para el enrutador UI) como lo mostró Shayan. Sin embargo, eso NO afecta el almacenamiento en caché de las plantillas cargadas por ng-include, porque esas plantillas no se cargan a través del enrutador.
Quería poder reparar cualquier plantilla, incluidas las cargadas por ng-include, en producción y hacer que los usuarios reciban la revisión en su navegador rápidamente, sin tener que volver a cargar toda la página. Tampoco me preocupa derrotar el almacenamiento en caché HTTP para plantillas. La solución es interceptar cada solicitud HTTP que realiza la aplicación, ignorar aquellas que no son para las plantillas .html de mi aplicación, luego agregar un parámetro a la URL de la plantilla que cambia cada minuto. Tenga en cuenta que la comprobación de ruta es específica de la ruta de las plantillas de su aplicación. Para obtener un intervalo diferente, cambie las matemáticas para el parámetro o elimine el% por completo para no almacenar en caché.
fuente
Si está utilizando un enrutador UI, puede usar un decorador y actualizar el servicio $ templateFactory y agregar un parámetro de cadena de consulta a templateUrl, y el navegador siempre cargará la nueva plantilla desde el servidor.
Estoy seguro de que puede lograr el mismo resultado decorando el método "when" en $ routeProvider.
fuente
Descubrí que el método de interceptor HTTP funciona bastante bien y permite una mayor flexibilidad y control. Además, puede buscar en la memoria caché para cada versión de producción utilizando un hash de versión como la variable buster.
Así es como se ve el método de desarrollo de caché de desarrollo
Date
.fuente
Aquí hay otra opción en Chrome.
Presiona F12para abrir las herramientas de desarrollador. Luego, Recursos > Almacenamiento en caché > Actualizar cachés .
Me gusta esta opción porque no tengo que deshabilitar el caché como en otras respuestas.
fuente
No hay una solución para evitar el almacenamiento en caché del navegador / proxy ya que no puede tener el control sobre él.
¡La otra forma de forzar contenido nuevo a sus usuarios es cambiar el nombre del archivo HTML! Exactamente como https://www.npmjs.com/package/grunt-filerev hace para los activos.
fuente
Actualizar documento cada 30 segundos:
Atributo w3schools HTML http-equiv
fuente