2013-07-29 3 views
8

컨트롤러와 공장은 다음과 같이 정의되어 있습니다. 나를 혼란 무엇공장에서 정의되지 않은 객체를 반환하는 각도 js

myApp.controller('ListController', 
     function($scope, ListFactory) { 
    $scope.posts = ListFactory.get(); 
    console.log($scope.posts); 
}); 

myApp.factory('ListFactory', function($http) { 
    return { 
     get: function() { 
      $http.get('http://example.com/list').then(function(response) { 
       if (response.data.error) { 
        return null; 
       } 
       else { 
        console.log(response.data); 
        return response.data; 
       } 
      }); 
     } 
    }; 
}); 

내가 내 컨트롤러에서 정의되지 않은 출력을 얻을 다음 콘솔 출력의 다음 행 내 공장에서 객체의 내 목록이 때문이다. 또한

myApp.controller('ListController', 
     function($scope, ListFactory) { 
    ListFactory.get().then(function(data) { 
     $scope.posts = data; 
    }); 
    console.log($scope.posts); 
}); 

내 컨트롤러를 변경 시도하지만 오류를

TypeError: Cannot call method 'then' of undefined 

참고가 나타날 나는 http://www.benlesh.com/2013/02/angularjs-creating-service-with-http.html 당신은 콜백을 사용하거나 필요

답변

8

을 통해 공장을 사용하여이 정보를 발견 기능을 사용하거나 이전에 반환하기 만하면 $http.get...

return $http.get('http://example.com/list').then(function (response) { 
    if (response.data.error) { 
     return null; 
    } else { 
     console.log(response.data); 
     return response.data; 
    } 
}); 
2

$ http.get이 비동기 적이므로 컨트롤러 (컨트롤러 내부)에 액세스하려고 할 때 데이터가 없을 수 있습니다 (따라서 정의되지 않음).

내 컨트롤러에서 factory 메소드를 호출 한 후 .then()을 사용하여이 문제를 해결합니다. 이

을하는 데 도움이

myApp.controller('ListController', function($scope, ListFactory) { 
    ListFactory.get().then(function(response){ 
     $scope.posts = response.data; 
    }); 
    // You can chain other events if required 
}); 

가 희망 :

myApp.factory('ListFactory', function($http) { 
    return { 
     get: function() { 
      $http.get('http://example.com/list'); 
     } 
    }; 
}); 

그리고 컨트롤러 :처럼 공장은 보일 것이다

관련 문제