2017-09-21 5 views
2

J'essaie d'obtenir des données d'un service dans un contrôleur et je garde une variable indéfinie. Quand j'exécute cela, j'arrive sur la console, par cet ordre, la ligne 11 est indéfinie et la ligne 9 me renvoie le tableau.

Et quand dans le contrôleur j'essaye d'obtenir la variable foo, il dit aussi undefined.

$scope.fooFighters = MyService.foo; 

Répondre

3

ajax/données http, vous devez écrire le code/fonction La raison est en raison de l'exécution asynchrone de l'appel API. Je vous suggère de réécrire le code pour utiliser une usine qui renverra un objet de promesse. Pas besoin d'apporter des variables inutiles.

angular.module("classes").factory("MyService", function($http) { 
    return { 
     fighters: function() { 
      return $http.get("/classes/all").then(function(response) { 
       return response.data; 
      }); 
     } 
    } 
}) 

Et dans votre contrôleur, vous pouvez obtenir la valeur en injectant le service dans le contrôleur, puis en faisant référence comme

MyService.fighters().then(function(data){ 
    $scope.fooFighters = data; 
    }); 
+0

si ajouter console.log ($ scope.fooFighters); juste après dans le contrôleur. Je suis d'abord indéfini pour la variable dans le contrôleur et ensuite j'obtiens le tableau du service console.log (this.fighters); –

+0

Essayez le code ci-dessus. Changez votre service à une usine pour renvoyer un objet de promesse. – Vivz

+0

J'ai essayé. il continue de se connecter "indéfini" sur la console –

0

car il faudra un certain temps pour charger les données de requête ajax/http après que cette ligne 9 fonctionnera. Donc, si vous voulez travailler avec à l'intérieur

$http.get("/classes/all").then(function (response) { 
     // do something 
    }); 
+0

Le problème est que si je veux y accéder dans le contrôleur. Il ne fera que le http après avoir exécuté le contrôleur –