2014-09-07 3 views
0

$ q와 약속을 사용하는 것과 관련이 있다는 것을 알았지 만 몇 시간 동안 사용해 본 결과 내 예제에서 어떻게 작동하는지 아직도 알 수 없습니다 .데이터 수신 후 각도 서비스/공장 반환

내가 원하는 데이터가있는 .json 파일이 있습니다. 나는 이드를 가진 사람들의 목록을 가지고있다. 내가 가지고있는 json 파일을 http.get 할 매개 변수를 쿼리 할 수있는 서비스 또는 팩토리를 갖고 싶습니다. 매개 변수를 기반으로 필터링 한 다음 컨트롤러로 다시 보냅니다. 내 main.js 내부

angular 
    .module("mainApp") 
    .controller('personInfoCtrl',['$scope', '$stateParams', 'GetPersonData', function($scope, $stateParams, GetPersonData) { 

    $scope.personId = $stateParams.id; //this part work great 

    $scope.fullObject = GetPersonData($stateParams.id); 
    //I'm having trouble getting ^^^ to work. 

    //I'm able to do 
    //GetPersonData($stateParams.id).success(function(data) 
       //      { $scope.fullObject = data; }); 
    //and I can filter it inside of that object, but I want to filter it in the factory/service 
    }]); 

나는

//angular.module(... 
//..a bunch of urlrouterprovider and stateprovider stuff that works 
// 
}]).service('GetPersonData', ['$http', function($http) 
{ 
    return function(id) { 
     return $http.get('./data/people.json').then(function(res) { 
     //I know the problem lies in it not 'waiting' for the data to get back 
     //before it returns an empty json (or empty something or other) 
     return res.data.filter(function(el) { return el.id == id) 
     }); 
    } 
}]); 

필터링의 구문을하고 컨트롤러의 모든 때 모든 것이 잘 작동하지만, 나는 그렇게 여러 컨트롤에서 동일한 코드를 사용하려면 나는 그것을 서비스 (또는 공장, 그냥 컨트롤러가 '깨끗한'보고 싶어)에 나가려고 노력하고있어. 정말 컨트롤러에 "GetPersonData를"주입 할 수 꿔

, 다음 서비스에 필터 기능에 구문 문제가 될 것 같습니다 JSON

+0

콘솔을 점검하고 오류를 확인 했습니까? 코드에 구문 오류가있는 것 같습니다. '.service ('GetPersonData', [ '$ http', function ($ http) { return function (id) { return $ http.get ('./ data/people.json').) 필터 함수의 return 문이 꺼져 있습니다. – PSL

+0

@PSL 아마도 이것은() 질문에 대한 최소한의 실행 가능한 코드를 작성하려고 노력하고 있습니다. 오류가 발생하지 않고 그냥 빈 객체를 반환합니다. –

답변

2

을 다시 얻을 수 GetPersonData (personId)로 전화하십시오.

.service('GetPersonData', ['$http', function($http){ 
    return function(id) { 
    return $http.get('./data/people.json').then(function (res) { 
      return res.data.filter(function(el) { return el.id == id }); 
     }); 
}}]); 

그러나 그러한 속성이 없기 때문에 원래의 문제에 대한 당신이 정말로 당신이 당신의 함수에서 반환하는 $q 약속의 success 속성을 액세스 할 수 없습니다 그것은 단지 직접 HTTP 함수에 의해 반환 약속에 존재, 존재 . 따라서 컨트롤러에서 체인을 연결하려면 then을 사용해야합니다.

GetPersonData($stateParams.id).then(function(data){ $scope.fullObject = data; }); 

당신이 당신의 서비스에서 return $http.get('./data/people.json')를 반환한다면 당신은 HTTP의 사용자 정의 약속 방법 successerror을 볼 수 있습니다.

+0

절름발이, 내가 피하려고했던 것입니다. 지금 나는 두 가지 서비스, 하나는 아약스를 잡고, 다른 하나는 아약스를 기다리고 다음 필터를 시도하고있다. –

+0

@charmonkie 무엇이 절름발이입니까? 그게 약속을 사용의 아름다움 ... 당신은 이전 체인에있는 데이터를 변경을 통해 그들을 체인 수 있습니다 ... – PSL

+0

컨트롤러에 다음 + 필터 물건 넣어 필요. –

관련 문제