2014-04-21 2 views
1

J'ai travaillé pour écrire un service pour retourner le nom d'utilisateur.service ne pas retourner la valeur

var username, $promise; 

angular.module('TestApp').factory('UserService', function($http) { 
$promise= $http.get('/api/getuser') 
.success(function(data) { 
    username = data; 
}); 

$promise.then(function() { 
return username; 
}); 
}); 

Mais l'injection de ce service dans un contrôleur retournerait dans une valeur non définie

angular.module('TestApp') 
.controller('UserLoginController', function($scope, UserService){ 
console.log("Username is: "+ UserService); 
}); 

Je confirme que la demande http get renvoie la valeur de nom d'utilisateur valide. Je suis tout à fait nouveau à angulaire et apprécierait vraiment si quelqu'un peut signaler ce que je fais mal ici.

+0

La racine du problème est que votre fonction d'usine UserService ne renvoie rien; et donc je soupçonne que l'usine UserService dans le contrôleur sera indéfinie. Mais, je n'ai pas le temps d'essayer de réécrire votre code. – JeffryHouser

+0

@JeffryHouser: D'accord. Merci d'avoir pris un coup de couteau. Je doute vraiment de la façon dont je l'injecte au contrôleur. – pbd

+2

Je vous suggère de passer par le tutoriel phonecat sur le site angulaire avant de poser toute question.Vous n'avez évidemment pas les bases de angularjs.Si votre usine ne retourne rien, ce n'est pas une usine. – mpm

Répondre

1

Ce code ci-dessus ressemble à des spaghettis. Voici une usine de base qui devrait faire ce que vous voulez:

app.factory('UserService', [ '$http', function($http){ 

    var userService = {}; 

    userService.getUser = function(){ 
    return $http.get('/api/getuser').then(function(res){ 
     return res.data; 
    },function(error){ 
     console.log(error); 
     return []; 
    }); 
    } 

    return userService; 
}]); 

puis l'appeler dans un contrôleur:

app.controller('MyController', ['$scope', 'UserService', function($scope,UserService){ 

    $scope.user = {}; 
    UserService.getUser().then(function(data){ 
    $scope.user = data.users[0]; 
    }); 
}]); 

Cela suppose un format JSON similaire à { users: [{ id: "34534534",name: "John" }] } retourné par votre API.

S'il vous plaît noter que j'ai écrit ceci à la volée et ne l'ai pas essayé. Cela devrait fonctionner cependant.

Attention: Je viens d'éditer mon code pour corriger certaines erreurs.

+1

Merci! Je vais l'essayer. De plus, je connais son mauvais code mais des spaghettis? – pbd

+0

+1; Je passais à une réponse quelque chose comme ça, mais a abandonné en raison d'autres contraintes de temps. – JeffryHouser

Questions connexes