J'ai créé une usine en tant que service pour obtenir des données du serveur à l'aide d'un appel d'API Web, mais si j'ai besoin d'obtenir à nouveau les mêmes données, je dois à nouveau accéder à l'API, je veux utiliser les mêmes données à d'autres endroits et je ne veux pas pour effectuer à nouveau un appel de l'API Web.

Existe-t-il un moyen de conserver les données en js angulaires?

0
Mukesh Kumar 21 avril 2017 à 11:29

3 réponses

Meilleure réponse

Moyens de partager les données dans l'application:

1. Utilisation du service

Nous pouvons créer un service pour set et get les données entre controllers et ensuite injecter ce service dans la fonction du contrôleur là où nous voulons l'utiliser.

Service:

app.service('setGetData', function() {
  var data = '';
    getData: function() { return data; },
    setData: function(requestData) { data = requestData; }
});

Contrôleurs:

app.controller('myCtrl1', ['setGetData',function(setGetData) {

  // To set the data from the one controller
  var data = 'Hello World !!';  
  setGetData.setData(data);

}]);

app.controller('myCtrl2', ['setGetData',function(setGetData) {

  // To get the data from the another controller  
  var res = setGetData.getData();
  console.log(res); // Hello World !!

}]);

Ici, nous pouvons voir que myCtrl1 est utilisé pour définir les données et myCtrl2 est utilisé pour obtenir les données. Ainsi, nous pouvons partager les données d'un controller à un another controller comme celui-ci sans faire d'autre appel d'API.

2. Utilisation du stockage de session

Créez un service d'usine qui enregistrera et renverra les données de session enregistrées en fonction de la clé.

app.factory('storageService', ['$rootScope', function($rootScope) {

    return {
        get: function(key) {
            return sessionStorage.getItem(key);
        },
        save: function(key, data) {
            sessionStorage.setItem(key, data);
        }
    };
}]);

contrôleur:

Injectez la dépendance storageService dans le contrôleur vers set et get les données du stockage de session.

app.controller('myCtrl',['storageService',function(storageService) {

  // Save session data to storageService
  storageService.save('key', 'value');

  // Get saved session data from storageService
  var sessionData = storageService.get('key');

});
1
Rohit Jindal 21 avril 2017 à 09:00

Vous pouvez utiliser HTML5 Web Storage pour cela.

localStorage.setItem("lastname", "Smith");
console.log(localStorage.getItem("lastname"));
0
Thakkie 21 avril 2017 à 08:32

Si vous effectuez un appel asynchrone dans votre service et que les données que vous récupérez sont «statiques», il est logique de les mettre en cache pour éviter une nouvelle surcharge à chaque fois que vous en avez besoin. Le cache est désactivé par défaut.

$http({
 method: 'GET',
 cache: true
}
1
Karim 21 avril 2017 à 08:45