Comment puis-je retourner des données à partir d'un $http.get() à l'intérieur d'une usine en angularjs
Je vais avoir beaucoup de mal avec cela et je n'arrive pas à trouver quoi que ce soit ici sur ou Google qui me permet de repérer ce que je fais mal
<!DOCTYPE html>
<html data-ng-app="testApp">
<head>
<title></title>
</head>
<body>
<div data-ng-controller="myController">
{{test}}<br/>
{{test2}}<br/>
{{test3}}
<ul>
<li data-ng-repeat="member in members">{{ member.firstname}}</li>
</ul>
</div>
<script type="text/javascript" src="angular.min.js"></script>
<script type="text/javascript">
angular.module('testApp', ['memberFactory']);
angular.module('testApp',[])
.factory('memberFactory', function($http){
var obj = {};
obj.data = "abcd";
obj.getResponse = function(){
var temp = {};
$http.get('hello.php').success(function(data){
alert(data);
temp =data;
});
return "some return value";
}
return obj
});
function myController($scope, memberFactory){
$scope.test= "testString";
$scope.test2= memberFactory.data;
$scope.test3= memberFactory.getResponse();
}
</script>
</body>
</html>
la return "some return value";
fonctionne mais quand j'essaie de revenir temp, sa valeur null. J'ai essayé différents moyens d'obtenir que cela fonctionne mais je n'arrive pas à définir le temp de la valeur à l'intérieur de la $http.get()
fonction
C'est probablement quelque chose de simple (ou d'une stupide erreur/approche erronée de ma part). Tout conseil serait grandement apprécié
- vous utilisez angulaire de la version 1.0.1, cela cassera 1.3..
Vous devez vous connecter pour publier un commentaire.
Utilisation reporter:
$http
. C'est le AngularJS mise en œuvre de la promesse/reporter le motif.{"promise":{}}
au lieu de rien donc je ne peut toujours pas accéder à mes données, des Idées?then
et toujours la même question, l'alerte à l'intérieur de laget
affiche[{"ID":"1","firstname":"John","surname":"Smith"},{"ID":"2","firstname":"Jack","surname":"Jones"}]
defer.$apply()
Merci pour votre aide, si vous souhaitez ajouter le $s'appliquent à votre réponse, je vais accepter votre réponseCe qui se passe ici est un résultat de la nature asynchrone de $http.obtenir, Lorsque vous exécutez $http.obtenir elle n'est pas exécutée dans l'ordre. C'est, il "branches" et de pistes le long de côté le reste du code. Ceci est fait afin de prendre en compte la latence du serveur.
Ici est une mauvaise visualisation.
Pouvez-vous voir combien de Temp est retourné avant qu'il a été donné une valeur?
Heureusement, vous pouvez utiliser ce Angulaire appelle une promesse, C'est une variable à laquelle vous pouvez revenir à partir d'une fonction, qui est "résolue" plus tard. Vous instanciez une promesse de ce genre.
Attribuer des valeurs à l'aide d'
Vous pouvez ensuite retourner cette promesse plus tard en la fonction, de la façon normale. ie.
Bien sûr, pour tout cela, vous devez l' $q bibliothèque, qui vous inclure dans les paramètres de la fonction.
{"promise":{}}
{ "promise": {}}
ce que je pense que je devrais être de se{"promise": [{"ID":"1","firstname":"John","surname":"Smith"},{"ID":"2","firstname":"Jack","surname":"Jones"}]}
mypromise.$apply()
Merci