2016-11-26 1 views
2
app.service('cityService',['$http',function($http){ 
this.get = function(){ 
     $http({ 
      method : 'get', 
      url : API_SERVER+'city/' 
     }).success(function(response){ 
      console.log(response); 
      return response; 
     }).error(function(response){ 
      console.log(response); 
     }); 
    }; 
} 

J'essaye d'utiliser le service pour aller chercher les données du serveur mais le problème est quand j'utilise le service pour stocker les données dans la variable de portée. je reçois undefined. Je reçois les données car les données sont affichées dans la console + le service fonctionne aussi quand j'ajoute le contrôleur mais les données ne sont pas sauvegardées dans les variables. J'ai utilisé $timeout pour retarder la vérification de la variable mais toujours pas de chance. J'ai aussi utilisé .then() mais il montre undefined pour le service quand j'ajouter un service ...travailler avec des services pour la manipulation de données angulaire

app.controller('Controller',['cityService',function(cityService){ 
$scope.temp = {}; 
$scope.temp = cityService.get(); 
}]); 

Quoi qu'il en soit pour transmettre les données du service au contrôleur? Note: également essayé de stocker les données dans la variable de service et retourner la variable service

this.var = '' 
this.get = function(){ 
    $http({ 
     method : 'get', 
     url : API_SERVER+'city/' 
    }).success(function(response){ 
     this.var = response 
     console.log(this.var); 
     return this.var; 
    }).error(function(response){ 
     console.log(response); 
    }); 
}; 

les données stocke dans la variable mais à la fin ne passe pas au contrôleur. des conseils?

Répondre

0

méthode this.get de votre service doit retourner un objet promise de, de sorte que l'appelant peut appeler .then méthode pour obtenir response ou à la chaîne la promesse.

service

app.service('cityService', ['$http', function($http) { 
    this.get = function() { 
     return $http.get(API_SERVER + 'city/'); 
     //below would work but use upper one smaller version 
     //return $http({ 
     // method : 'get', 
     // url : API_SERVER+'city/' 
     //}); 
    }; 
}]); 

Et puis tout en accédant à des données à l'intérieur de votre contrôleur, vous pouvez placer .then fonction dessus pour obtenir une réponse de celui-ci.

De plus, vous avez manqué d'ajouter la dépendance $scope à l'intérieur de la matrice DI de votre contrôleur.

app.controller('Controller', ['cityService', '$scope', 
    function(cityService, $scope) { 
    $scope.temp = {}; 
    cityService.get().then(function(response) { 
     console.log(response) 
     $scope.temp = response.data; 
    }); 
    } 
]); 

Demo Here

+0

$ http retourner une promesse faite par défaut ... vérifier AngularJS docs ... essayé mais j'obtiens l'erreur ..... alors() ne peut pas être réglé sur undefined. pouvez-vous montrer un jsfiddle avec le code de travail? coz mine ne fonctionne pas –

+0

@ScienCeSubject vérifier réponse mise à jour & plunkr :) –

+0

il a un peu aidé ... changé ma logique pour réaliser ce que je voulais ... mais encore merci de m'aider –