2014-11-21 4 views
1

나는 angularjs를 처음 사용합니다. 내가 공장에서 함수를 호출하려고하지만 아래의 오류가 발생하고, 팩토리 메서드 호출시 Angularjs 오류

Error: [$injector:undef] Provider 'todoStorage' must return a value from $get factory method. 

내 공장,

todomvc.factory('todoStorage', function ($q,$http) { 
var STORAGE_ID = 'todos-angularjs-perf'; 

function get(){ 
      var promise = $q.defer(); 

      $http.get('http://localhost/test.php').success(function(data){ 
        promise.resolve(data); 
      }); 

      return promise.promise; 
     } 

}); 

이다 그리고이 함수를 호출하는 방법이있다

var todos = $scope.todos = todoStorage.get(); 

정확히 무슨 일이 일어나고 있으며이 오류가 발생하는 이유는 무엇입니까?

답변

4
todomvc.factory('todoStorage', function ($q,$http) { 
var STORAGE_ID = 'todos-angularjs-perf'; 


function get(){ 

    return $http.get('http://localhost/test.php'); 
} 

return{get:get}; 

}); 

//call the service like this 
todoStorage.get().then(function(res){ 
    $scope.todos = res.data; 
}); 

코드가 실제 서비스 팩토리를 반환하지 않습니다. 팩토리를 사용하고 있으므로 내부 함수를 가리키는 JavaScript 객체가 반환됩니다. 그렇지 않으면 유효한 팩토리가 아니며 외부 코드는 내부 get 함수로 갈 수 없습니다.

+0

오류가 해결되었지만 데이터를 가져 오지 못하는 이유는 무엇입니까? 약속은 null을 반환합니다. 연기하면 호출이 동기화됩니까? –

+0

서비스 내부가 아닌 호출 측에서 약속을 해결하는 것이 좋습니다. 또한 $ q의 구현에 따라 약속이 즉시 해결 되더라도 약속은 결코 동 기적으로 작동하지 않습니다. – TGH

+0

여기에 새로운 약속을하지 않겠습니다. $ http로 생성 된 원래 약속을 반환하는 것이 더 쉽습니다. – TGH