working que not item div cloak angularjs angularjs-resource

que - Cómo actualizar/invalidar $ caché de recursos en AngularJS



ng-cloak que es (3)

Tengo un simple recurso $ de usuario que usa la implementación predeterminada de $ http caché así:

factory(''User'', function($resource){ return $resource(endpoint + ''/user/current/:projectId'', {}, {get: { cache: true, method: ''GET'' } } ); })

Esto funciona muy bien, es decir, mi servidor solo se llama una vez en mi aplicación, luego el valor se obtiene de la memoria caché.

Pero necesito actualizar el valor del servidor después de una determinada operación. ¿Hay una manera fácil de hacer eso?

Gracias.


En lugar de usar un argumento booleano en la propiedad de cache de cada action , puede pasar una instancia de caché creada con $cacheFactory que puede tener más control (es decir, borrar el caché).

Ejemplo de uso:

app.factory(''Todos'', function($resource, $cacheFactory) { var cache = $cacheFactory(''todo''); return $resource(apiBaseUrl + ''/todos/:id'', { id: ''@id'' }, { ''get'': { method: ''GET'', cache: cache }, ''query'': { method: ''GET'', cache: cache, isArray: true } }); });


Encontré este hilo buscando algo similar, pero descubrí que $ resource administrará el caché automáticamente, por lo que no es necesario forzar el borrado del caché.

La idea es que si tiene un recurso que puede consultar, esa respuesta de consulta se almacenará en caché, pero si guarda algo para ese mismo recurso, los datos previamente almacenados en caché no serán válidos, por lo que se borrará para usted. Tiene sentido que funcione de esta manera.

Aquí hay un código que uso para hacer esto (puede ignorar la parte de creación de fábrica que parece extraña y prestar atención al cuerpo de "clase").

''use strict''; sampleApp.players.$ng.factory(''sampleApp.players.PlayerService'', [ ''$log'', ''$resource'', sampleApp.players.PlayerService = function ($log, $resource) { var service = {}; $log.info(''Creating player resource.''); var Player = $resource(''/api/players'', {}, {query: { isArray: true, cache: true, method: ''GET'' }}); service.addPlayer = function(playerName) { $log.info(''Saving a new player.''); return new Player({name: playerName}).$save(); }; service.listPlayers = function () { $log.info(''Fetching players.''); return Player.query(); }; return service; }]);

Si llama a la función listPlayers varias veces, la primera llamada realiza una solicitud de obtención de http y todas las llamadas posteriores se almacenan en caché. Sin embargo, si llama a addPlayer, se realiza una publicación http como se esperaba, y luego la siguiente llamada a listPlayers realizará una obtención HTTP (no en caché).

Esto lo mantiene alejado del negocio de administrar el caché de otra persona ($ http) y tratar de mantenerse al día con qué URL se están utilizando para las solicitudes y cuáles están borrando cachés en los momentos adecuados.

Supongo que la moraleja de la historia aquí es trabajar con la biblioteca y todo estará bien ... a excepción de cualquier error o característica incompleta, pero Angular no tiene ninguno de esos;)

ps Todo esto se ejecuta en AngularJS 1.2.0.


Mantenga el booleano y obtenga el caché de $http :

var $httpDefaultCache = $cacheFactory.get(''$http'');

Luego puede controlarlo como cualquier otro caché hecho con $cacheFactory , una instancia de uso que se proporciona a continuación:

$httpDefaultCache.remove(key); // Where key is the relative URL of your resource (eg: /api/user/current/51a9020d91799f1e9b8db12f)