/ / Como posso usar o angular-cache em conjunto com o AngularJS LocalStorageModule - angularjs, angular-cache, angular-local-storage

Como posso usar o cache angular em conjunto com o AngularJS LocalStorageModule - angularjs, angular-cache, angular-local-storage

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 № 1

Eu 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