Eu tenho um recurso User $ simples que usa a implementação de cache $ http padrão assim:
factory('User', function($resource){
return $resource(endpoint + '/user/current/:projectId', {},
{get:
{
cache: true,
method: 'GET'
}
}
);
})
Isso funciona muito bem, ou seja, meu servidor só é chamado uma vez em meu aplicativo, então o valor é obtido do cache.
Mas preciso atualizar o valor do servidor após uma determinada operação. Existe uma maneira fácil de fazer isso?
Obrigado.
angularjs
angularjs-resource
Alexandre Bulté
fonte
fonte
cache
-{boolean|Cache}
- Se verdadeiro, um cache $ http padrão será usado para armazenar a solicitação GET, caso contrário, se uma instância de cache construída comRespostas:
Mantenha o booleano e obtenha o
$http
cache:Então você pode controlá-lo como qualquer outro cache feito com
$cacheFactory
, uma instância de uso fornecida abaixo:fonte
$resource
fábrica?Em vez de usar um argumento booleano na
cache
propriedade de cada um,action
você pode passar uma instância de cache criada com $ cacheFactory sobre a qual você pode ter mais controle (ou seja, limpar o cache).Exemplo de uso:
fonte
Eu encontrei este tópico procurando por algo semelhante, mas descobri que $ resource irá gerenciar o cache para você automaticamente, então não há necessidade de forçar a limpeza do cache.
A ideia é que se você tiver um recurso que possa consultar, essa resposta da consulta será armazenada em cache, mas se você salvar algo para esse mesmo recurso, os dados armazenados em cache anteriormente devem ser inválidos, portanto, são limpos para você. Faz sentido que funcione dessa maneira.
Aqui está um código que uso para fazer isso (você pode ignorar a parte possivelmente estranha da criação de fábrica e prestar atenção ao corpo da "classe").
Se você chamar a função listPlayers várias vezes, a primeira chamada fará uma solicitação http get e todas as chamadas subsequentes serão armazenadas em cache. Se você chamar addPlayer, uma postagem http será executada conforme o esperado e, em seguida, a próxima chamada para listPlayers executará um http get (não armazenado em cache).
Isso o mantém fora do negócio de gerenciar o cache de outra pessoa ($ http) e tentar acompanhar quais URLs estão sendo usados para solicitações e quais estão limpando caches nos momentos certos.
Suponho que a moral da história aqui é trabalhar com a biblioteca e tudo ficará bem ... exceto por quaisquer bugs ou recursos incompletos, mas o Angular não tem nenhum desses;)
ps Está tudo em execução no AngularJS 1.2.0.
fonte