Tenho um aplicativo que, quando inicia, obtém uma lista de usuários administradores. Os dados são mais ou menos assim:
var users =
[
{"id":"527ddbd5-14d3-4fb9-a7ae-374e66f635d4","name":"x"},
{"id":"966171f8-4ea1-4008-b6ac-d70c4eee797b","name":"y"},
{"id":"de4e89fe-e1de-4751-9605-d6e1ec698f49","name":"z"}
]
Tenho uma chamada que obtém estes dados:
os.getUserProfiles($scope);
e a função:
getUserProfiles: function ($scope) {
$http.get("/api/UserProfile/GetSelect")
.success(function (data, status, headers, config) {
$scope.option.userProfiles = data;
});
},
Eu gostaria de evitar que os usuários administradores tenham que continuamente emitir solicitações para obter a lista de usuários. Eu estava olhando para a $ cacheFactory em Angular, mas isso realmente não parece atender às minhas necessidades.
O cache angular que está no github parece interessante, mas não tenho certeza de como usá-lo com objetos como este e então ter os dados armazenados usando o LocalStorageModule.
Alguém pode me dar um exemplo de como eles usaram este produto com o LocalStorageModule.
Respostas:
2 para resposta № 1Eu sugeriria verificar a extensão cache angular.
Conforme descrito na documentação: http://jmdobry.github.io/angular-cache/guide.html#using-angular-cache-with-localStorage
app.service("myService", function ($angularCacheFactory) {
// This cache will sync itself with localStorage if it exists, otherwise it won"t. Every time the
// browser loads this app, this cache will attempt to initialize itself with any data it had
// already saved to localStorage (or sessionStorage if you used that).
var myAwesomeCache = $angularCacheFactory("myAwesomeCache", {
maxAge: 900000, // Items added to this cache expire after 15 minutes.
cacheFlushInterval: 3600000, // This cache will clear itself every hour.
deleteOnExpire: "aggressive", // Items will be deleted from this cache right when they expire.
storageMode: "localStorage" // This cache will sync itself with `localStorage`.
});
});
Ou podemos injetar implementação de armazenamento local personalizado
storageImpl: localStoragePolyfill // angular-cache will use this polyfill instead of looking for localStorage
Eu estou usando este plugin https://github.com/grevory/angular-local-storage, que é realmente simples de usar, ao mesmo tempo que fornece API completa.
Verifique também o uso de armazenamento local para armazenar os modelos em cache: como armazenar em cache parcials angularjs?
NOTA: Este artigo Ative o serviço $ http do Angular com cache, e principalmente a seção:
Cache avançado, foi para mim a razão para mudar para cache angular
Como criar um Polyfill personalizado? (Padrão do adaptador)
Conforme documentado Aqui, precisamos passar o localStoragePolyfill implementando esta interface:
interface Storage {
readonly attribute unsigned long length;
DOMString? key(unsigned long index);
getter DOMString getItem(DOMString key);
setter creator void setItem(DOMString key, DOMString value);
deleter void removeItem(DOMString key);
void clear();
};
O angular-cache se preocupa apenas com estes três métodos:
- setItem
- getItem
- remover item
Ou seja: Implementar um wrapper conversando com a API de armazenamento local, transformando-o na API de cache avançada. É isso. Nada mais