2014-04-21 4 views
1

사용자 이름을 반환하는 서비스를 작성하기 위해 노력했습니다. 값을 반환하지 않는 서비스

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; 
}); 
}); 

하지만, 컨트롤러에서이 서비스를 주입하는 것은 정의되지 않은 값 반환은

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

나는 HTTP GET 요청이 유효한 사용자 이름 값을 반환 있음을 확인했다. 나는 아주 새로운 각도이고, 누군가 내가 여기서 잘못하고있는 것을 지적 할 수 있다면 정말로 감사 할 것입니다.

+0

문제의 근본 원인은 UserService 팩토리 함수가 아무 것도 반환하지 않는다는 것입니다. 따라서 컨트롤러의 UserService 팩토리가 정의되지 않은 것으로 의심됩니다. 하지만 코드 재 작성을 시도 할 시간이 없습니다. – JeffryHouser

+0

@JeffryHouser : 알겠습니다. 그걸 찔러 줘서 고마워. 나는 그것을 컨트롤러에 주입하는 방법에 대해 정말로 의심 스럽다. – pbd

+2

질문을하기 전에 앵귤러 웹 사이트의 phonecat 튜토리얼을 읽어 보시기 바랍니다. 분명히 angularj의 기본 정보를 얻지 못했을 것입니다. 공장에서 아무것도 반환하지 않으면 공장이 아닙니다. – mpm

답변

1

위의 코드는 스파게티처럼 보입니다.

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; 
}]); 

다음 컨트롤러에서 전화 :

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

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

이 당신의 API에 의해 반환 { users: [{ id: "34534534",name: "John" }] } 유사한 JSON 형식을 가정 여기에 당신이 원하는 일을해야 기본적인 공장입니다.

비행 중에이 글을 쓴 것으로 사용해보십시오. 그래도 작동합니다.

경고 : 방금 실수를 수정하기 위해 코드를 편집했습니다.

+1

감사! 그것을 시도 할 것이다. 또한, 나는 나쁜 코드를 알고 있지만 스파게티 ?? – pbd

+0

+1; 나는 이와 같은 대답으로 이동했지만 다른 시간 제약으로 포기했다. – JeffryHouser