2013-07-04 2 views
1

J'essaie de charger un JSON au démarrage de l'application et de répartir les données entre tous mes contrôleurs. Je sais que ce n'est pas très difficile à faire, mais je suis confus de tous les articles/réponses que j'ai lus parce qu'ils utilisent une syntaxe différente de celle que je peux, quelqu'un peut-il me diriger sur comment faire?comment utiliser factory/service pour partager des informations entre plusieurs contrôleurs dans angularjs?

Im faisant actuellement le contrôleur faire le $ http.get:

myApp = angular.module("myApp", []) 

myApp.controller "HomeCtrl", ($scope, $http, $routeParams) -> 
$http.get('gethome.php').success (data) -> 
    $scope.home = data 

Mais je dois me répéter dans chaque contrôleur que je veux avoir accès à ces données

Répondre

5

Je vous recommande d'utiliser modèle Memoization ainsi que le service et de réutiliser le service dans le contrôleur

Pls vérifier le code ci-dessous exemple

var app = angular.module('plunker', []); 

      app.service('cache', function ($http,$q) { 
       var mycache={}; 
       return { 
        getdata: function (key) { 
         var deferred = $q.defer(); 
         if (mycache[key]) { 
          deferred.resolve(mycache[key]); 
         } 
         else { 
          $http.get('TextFile.txt').then(function (data) { 
           mycache[key] = data.data; 
           deferred.resolve(mycache[key]); 
          }); 
         } 
         return deferred.promise; 
        } 
       } 
      }); 


      app.controller('test', function ($scope, cache) { 
       cache.getdata('cache').then(function (data) { 
        $scope.data = data; 
       }); 
     }); 

      app.controller('test1', function ($scope, cache) { 
       //since data is already cached now it will server the cached data 
       cache.getdata('cache').then(function (data) { 
        $scope.data = data; 
       }); 
     }); 
+0

Ajay, merci mais pouvez-vous expliquer ce code? Ou simplifiez-le un peu –

+0

Le service de base angulaire est singleton instance .So quand vous appelez le service première fois mycahe sera vide puis nous faisons un ajax hit et récupérons les données et assigner à mycahe. La prochaine fois que vous appelez un service mycache ne sera pas vide donc il retournera directement le résultat ajouté à mycache donc il n'y aura aucune exigence de faire un nouvel appel ajax –

+0

Merci pour l'information, Ajay. –

1

Vous pouvez accéder à $scope avec:

angular.element(document.getElementById('YourCtrl')).scope(); 

Après, vous pouvez initialiser data dans tous vos contrôleurs.

+0

ne est pas une bonne façon de le faire dans angulaire –

+1

OK mais vous voulez accéder à 'Controller', je propose une solution;) – EpokK

Questions connexes