$http ist ein Kerndienst in AngularJS, der zum Lesen von Daten von Remote-Servern verwendet wird. In tatsächlichen AngularJS-Projekten ist es oft notwendig, mehrere $http-Anfragen zu verarbeiten. Jede $http-Anfrage gibt ein Versprechen zurück. Wir können mehrere Versprechen in ein Array-Argument einfügen, das von der Methode $q.all() akzeptiert wird.
1. Behandeln Sie mehrere $http-Anfragen
angular.module('app',[]) .controller('AppCtrl', function AppCtrl(myService){ var app = this; myService.getAll().then(function(info){ app.myInfo = info; }) }) .service('myService', function MyService($http, $q){ var myService = this; user = 'https://api...', repos = '', events = ''; myService.getData = function getData(){ return $http.get(user).then(function(userData){ return { name:userData.data.name, url:userData.data.url, repoCount: userData.data.count } }) }; myService.getUserRepos = function getUserRepos(){ return $http.get(repos).then(function(response){ return _.map(response.data, function(item){ return { name: item.name, description:item.description, starts: item.startCount } }) }) } myService.getUserEvents = function getUserEvents(){ ... } myService.getAll = function(){ var userPromise = myService.getData(), userEventsPromise = myService.getUserRepos(), userReposPromise = myService.getUserRepos(); return $q.all([userPromise, userEventsPromise, userReposPromise]).then(function(){ .... }) } })
2.$http-Anfragecache
Der zweite formale Parameter der get-Methode von $http akzeptiert ein Objekt. Das Cache-Feld des Objekts kann einen Bool-Typ akzeptieren, um das Caching zu implementieren, also {cache:true}, oder es kann auch einen Dienst akzeptieren.
Erstellen Sie einen Dienst über die Factory-Methode und injizieren Sie den Dienst in den Controller.
angular.module('app',[]) .factory("myCache", function($cacheFactory){ return $cacheFactory("me"); }) .controller("AppCtrl", function($http, myCache){ var app = this; app.load = function(){ $http.get("apiurl",{cache:myCache}) .success(function(data){ app.data = data; }) } app.clearCache = function(){ myCache.remove("apiurl"); } })
Zusammenfassung des Herausgebers:
● Tatsächlich ist es $cacheFactory
, das den Caching-Mechanismus implementiert
● Platzieren Sie den Caching-Mechanismus über {cache:myCache}
in der aktuellen Anfrage
● $cacheFactory verwendet die Anforderungs-API als Schlüssel, sodass beim Löschen des Caches auch der Cache basierend auf diesem Schlüssel geleert wird
Die oben beschriebene Methode zum Zwischenspeichern und Verarbeiten mehrerer $http-Anfragen in AngularJS wird hoffentlich für alle hilfreich sein.