2013-04-13 2 views
2

저는 AngularJS를 처음 사용 했으므로 친절하게 대해주십시오.AngularJS 리소스가 해결되지 않았습니다.

AngularJS의 $ resource 속성을 사용하여 백엔드에서 데이터를 검색하려고하지만 실제 호출이 완료되기 전에 속성이로드되고있는 것 같습니다. 현재

나는 다음과 같은 코드를 가지고 :

컨트롤러 :

MyApp.controller('IndexCtrl', function IndexCtrl($scope, socket, carsRes) { 
    console.log(carsRes.cars.get()); 
    $scope.cars = carsRes.cars.get(); 
}); 

공장

.factory('carsRes', function($resource) { 
     var result = {}; 
     result.cars = $resource('/cars/:id', {}, { 
      'get': {method: 'GET'}, 
      'save': {method: 'POST'}, 
      'query': {method: 'GET', isArray: true}, 
      'remove': {method: 'DELETE'}, 
      'delete': {method: 'DELETE'} 
     }); 

     return result; 
}); 

하지만 carsRes.cars.get를 저장할 지점에서() $ scope.cars에서 호출이 아직 완료되지 않았고 console.log가 해결 된 $가 여전히 거짓.

통화가 해결되기를 기다리는 방법은 무엇입니까? 나는 $ q에 관하여 무언가를 읽었지 만 그것은 나에게 정말로 명확하지 않다.

+0

좀 더 내가 작동 뭔가를 발견 주위에 파고 후 ? – DirkZz

답변

6

resource.get()이 비동기이기 때문에 이러한 현상이 발생합니다. 즉시 빈 참조를 반환하고 아약스 호출이 완료되면 실제 데이터로 채워집니다.

결과를 처리하는 가장 좋은 방법은 콜백 기능입니다 :

carsRes.cars.get(function(response){ 
    // We now have a completed ajax call, with the response 
    $scope.cars = response; 
}); 

$resource 문서에서 더 많은 예제를 참조하십시오. ` 이가 적절한 솔루션이며, 은`carsRes.cars.get (기능 (데이터) {; $ scope.cars = data.doc}) :

+2

실제로 $ http와는 달리 ngResource 객체 메소드는 약속을 반환하지 않습니다. $ 리소스 객체 메소드를 호출하면 빈 참조 (isArray에 따라 객체 또는 배열)가 즉시 반환된다는 사실을 깨닫는 것이 중요합니다. 서버에서 데이터를 반환하면 기존 참조에 실제 데이터가 채워집니다. _ – joakimbl

+0

@joakimbl 수정 해 주셔서 감사합니다! 나는 $ http를 생각하고 있었다. 답변을 업데이트했습니다. – jszobody

+0

나는 ngResource에서도 약속을 찾고있었습니다. 지적 해 주셔서 감사합니다! 따라서 ngResource를 사용하여 경로를 확인할 수도 없습니까? – Maarten

관련 문제