Quelle est la meilleure façon de partager certaines données sur tous les contrôleurs et champs d'application de mon application de page unique? Disons que j'ai un petit ensemble de données que je veux pouvoir accéder partout, et je ne veux pas interroger la base de données chaque fois que j'en ai besoin.AngularJS: Comment partager des données sur toutes les pages et le contrôleur de mon SPA?
Répondre
services de données partagés semble être le meilleur aproche pour votre cas. Il y a $rootScope
comme portée globale, mais, $rootScope
ne devrait pas être utilisé pour une telle chose en raison de problèmes de performance. $rootscope
fait partie du cycle de digestion angulaire, donc quand vous y ajoutez quelque chose, vous ajoutez également quelque chose de plus à vérifier. Par conséquent, il n'est pas recommandé d'utiliser à moins que ce soit extrêmement nécessaire.
Par exemple, pour les services simples:
app.service('SharedDataService', function() {
var Data = {
field1: 'qweqwe',
field2: '12312'
};
return Data;
});
Pour les services complexes opérations asynchrones:
app.service('SharedDataService', function() {
var self = this;
this.getData = function() {
if(self.cachedData){
return $q.resolve(self.cachedData);
}
return $http.get('my-data-url').then(function (response) {
self.cachedData = response.data;
return self.cachedData;
});
};
});
et le contrôleur:
app.controller('MyController', function ($scope, SharedDataService) {
SharedDataService.getData().then(function (data) {
$scope.data = data;
});
});
uh , excusez-moi ou cette question stupide, mais dois-je utiliser le même nom "SharedDataService" comme vous l'avez mentionné? Je demande qu'en raison de la façon dont vous avez expliqué – Xsmael
Pas de problème @Xsmael vous pouvez le nommer quel que soit le DataService que vous voulez mais assurez-vous de garder des noms cohérents en fonction de la responsabilité du service. En outre, il ya un guide de style pour angularjs écrit à l'origine par Jon Papa et maintenu par lui et la communauté qui peut vous aider.Il a une bonne considération sur les noms de composants et d'autres choses, vérifiez cela sur –
merci! quand le code du service est-il exécuté? est-ce seulement quand on accède à un contrôleur où il a été injecté ou à partir du moment où l'application est chargée? – Xsmael
Les données à stocker dans rootscope variable $
(ou)
données à stocker dans les services
En AngularJS vous pouvez effectuer cette opération en différentes manières. soit vous pouvez utiliser $ rootscope ou vous pouvez diffuser des données ou vous pouvez utiliser des services ou des usines.
Mais le pari préféré est d'utiliser des services. La première chose est que c'est facile. Vous pouvez utiliser le même service sur chaque contrôleur pour accéder aux données.
Si vous voulez en savoir plus sur les services angularjs, veuillez vérifier le lien ci-dessous.
http://viralpatel.net/blogs/angularjs-service-factory-tutorial/
meilleur pour utiliser le service dit commonService
et après l'obtention de données du magasin de base de données sur une variable à l'intérieur du service comme celui-
this.dbDataSearch = function(parameters){
// Search record from database
this.resultData = data;
}
Contrôleur 1:
$scope.data = commonService.resultData;
Contrôleur 2:
$scope.data = commonService.resultData;
Contrôleur n:
$scope.data = commonService.resultData;
Utilisez 'RootScope' et vous pouvez accéder à toutes les données RootScope dans l'un des contrôleurs portée – Sajan
@Xsmael: Utiliser rootScope de $, ce qui est une variable globle dans angulaire js – Jigar7521