2016-09-09 3 views
2

ich meine modale HTML-Seite für die erste Zeit bin Laden und korrekte Daten zu erhalten, aber wenn ich versuche, zum zweiten Mal laden ich eine Störung erhalte,Fehler beim Abruf, wenn Caching in AngularJS

Bitte meinen JS-Code unten finden,

var cache = $cacheFactory('cacheId'); 
var cacheData = cache.get('xml'); 

if (!cacheData) { 
    MyRestApi.getData($scope.data1).then(function(response) { 
     cacheData = response; 
     cache.put('xml', cacheData); 
    }); 
} else { 
    var processdata = cache.get('xml'); 
} 

in meinem MyRestApi.js ich den Code unten verwenden,

getData: function(Key) { 
    return $http.get(baseURL + '/getDetails/' + Key, { 
     headers: header, 
     cache: true 
    }); 
} 

Dies ist das erste Mal, dass ich $ cache in Winkel JS verwenden, informieren Sie mich bitte, warum ich diese Störung erhalte . Ich lade die gleiche modale Seite zum zweiten Mal und ich bekomme diesen Fehler. Getting angular.js: 13568 Fehler: [$ cacheFactory: iid] CacheId 'cacheId' ist bereits vergeben!

+0

Wenn Sie 'cache: true' setzen, wird die get-Anfrage automatisch zwischengespeichert. Wenn Sie den Cache manuell manipulieren möchten, sollten Sie die 'cache' -Eigenschaft auf das $ cacheFactory-Objekt setzen, das Sie gerade erstellt haben. Aber willst du das wirklich? – Amygdaloideum

+0

Ist es möglich, direkt wie $ scope.cache ohne $ cacheFactory zu erhalten, wenn es automatisch zwischenspeichert, wie kann ich den Cache-Wert von MyRestApi zu JS-Code bekommen. Ich muss die Daten nur einmal einstellen und es zum zweiten Mal holen, wo die Daten sehr groß sind und lange brauchen, um geladen zu werden. $ scope.cache.put ('xml', cacheData) und erhalten mit $ scope.cache.get ('xml'), bitte beraten Ist das die Art, wie Sie erwähnen. – user3428736

Antwort

0

Dies ist genug:

getData: function(Key) { 
    return $http.get(baseURL + '/getDetails/' + Key, { 
     headers: header, 
     cache: true 
    }); 
} 

Das erste Mal, wenn Sie die Daten erhalten, wird es in einem HTTP-Cache gespeichert werden. Wenn Sie dieselbe Anforderung zum zweiten Mal ausführen, wird der zwischengespeicherte Wert übergeben, anstatt ihn erneut abzurufen. Sehen Sie sich die Netzwerk-Registerkarte in den Entwicklungswerkzeugen an, um zu bestätigen.

Dies ist jedoch nur wahr, wenn Sie eine einzelne Seite Anwendung haben, Neuladen (f5) die Seite wird den Cache zurücksetzen.

Verwandte Themen