2014-05-09 9 views
0

내 첫 번째 각도 어플리케이션을 개발 중입니다.하지만 서비스중인 컨트롤러에서 데이터에 액세스 할 수 없습니다. 서비스 코드는 다음과 같습니다.공장에서 컨트롤러의 데이터에 액세스 할 수 없습니다.

var BASE = "https://abc.com/";

loginApp.factory('authFactory',function ($http,$location){ 
    var factory ={}; 
    factory.login= function (username ,password){ 

     var loginData='{"emailId":"'+username+'","password":"'+password+'"}'; 

     return $http({ url: BASE+'/login' , 
         method: "POST", 
         data: loginData 
      }).success(function (results) { 
       console.log("in service" +results.token); 
       return results; 
      }).error(function() { 
       console.log("error occured"); 
       var err = "error"; 
       return err; 
     }); 
    }; 
    return factory; 
}); 

내 컨트롤러 코드는 다음과 같습니다.

loginApp.controller ('LoginController',function ($scope, $rootScope, $location,authFactory){ 
      $scope.submit= function(){ 
        authFactory.login($scope.username, $scope.password).then(function (status) { 
         console.log("status is" +status.token); 
        }); 
      }; 

}); 

내 문제는 내가 서비스에서 results.token에 액세스 할 수 있어요하지만 난 status.token으로 컨트롤러에서 동일한 토큰에 액세스하려고하면,이 문제를 해결하기 위해 "정의되지 않은"호야 도움을주고있다.

+0

하여 서버 측 코드가 무엇을 호출하는 말에이 코드를 추가해야합니까? – user2422960

+0

'상태'만 기록 할 수 있습니까? 아니면 정의되지 않았습니까? –

답변

0

그냥,은 $ HTTP 약속을 반환 컨트롤러에서 처리 : 서비스에서

:

컨트롤러에서
return $http({ url: BASE+'/login' , 
        method: "POST", 
        data: loginData 
     }); 

:

authFactory.login($scope.username, $scope.password) 
.success(function(status) { 
        console.log("status is" +status.token); 
       }); 
+1

Angular와 promise에 익숙하지 않은 사람들에게 공통적 인 이슈에 대한 중요한 구성 요소는'$ http'가 비동기 요청을 관리하기 위해 약속을 사용한다고 설명합니다. 그래서'login $ http (...) '를 사용하여'login'이 리턴 될 때, 컨트롤러는 _promise_를 리턴 할 것입니다. 컨트롤러는 위 예제를 사용하여 결과 값을 검색 할 수 있습니다. 새로운 사람들은 OP가 위에서 한 일을 자주하고,'.success' 함수에서 돌아 오는 것이'login'이 응답의 결과를 리턴 할 것이라고 생각합니다. 그건 사실이 아니야. – HackedByChinese

+0

감사합니다 ... 지금 작동 중입니다. – dip

0

나의 제안이있는 REST 기반 및 약속 기반 각도 모듈 Restangular을 사용하면 API 통신을위한 서비스를 쉽게 작성할 수 있습니다. 예를 들어, 귀하의 경우 :

myModule.factory('authFactory', ['Restangular', 
    function(Restangular) { 
    return { 
     login: function(name, password) { 
     // post /login 
     return Restangular.all('login').post({"emailId":"'+name+'","password":"'+password+'"}); 
     } 
    }; 
    } 
]); 

업데이트 : 컨트롤러에서 함수

$scope.submit(); 
+0

Restangular는 내가 사용하는 아름다운 라이브러리이지만 문제를 해결하지 못합니다. 또한 데이터를 컨트롤러로 가져 오는 방법을 설명해야합니다. –

관련 문제