2013-07-05 2 views
3

나는에 정상적으로 .PHP 파일 출력 (JSON)을 유도 할 수있는 공장을 만들어 간 데이터,주 http.get 공장과 컨트롤러

내 질문은 내가 컨트롤러 고급형 아파트에서 액세스 어떻게 :

myApp = angular.module("myApp", []) 

myApp.factory "mainData", ($http) -> 
$http.get('gethome.php').success (data) -> 
    data: data 
    console.log(data) 

myApp.controller "HomeCtrl", ($scope, mainData) -> 
$scope.home = mainData.data 

는 내가, 자습서 어디에서나 를 모듈/컨트롤러를 만들고 임 올바른 방법을 찾는 방법에 대한 예제를 많이 참조 임 여기에 올바른 구문을 선택하는 경우 알려 주시기 바랍니다

답변

9

에 공장을 주입 공장 이전에 반환하기 때문에,

myApp.factory("mainData", function($http) { 
    var mData = {}; 
    $http.get('gethome.php').success(function(data) { 
    mData.data = data; 
    }); 
    return mData; 
}); 


myApp.controller("HomeCtrl", function($scope, mainData) { 
    $scope.home = mainData.data; // Here mainData equals mData object literal from the mainData factory 
}); 

하지만, 코드에 문제가 mainData.data은 항상 정의되지 것입니다 : gular 컨트롤러는, 주입 된 공장 기준은 공장에서 반환 한 해당 구성원을 포함 async $ http 요청이 완료되었습니다. 그래서 그 대신, 당신 공장은 약속을 반환해야합니다

myApp.factory("mainData", function($http) { 
    return $http.get('gethome.php'); 
}); 

myApp.controller("HomeCtrl", function($scope, mainData) { 
    mainData.success(function(data) { 
    $scope.home = data; 
    }); 
}); 

주 : $ HTTP 방법은 기본적으로 항상 약속을 반환합니다.

+0

멋진 대답 스튜, –

+0

을 나는 그래서 인사라고 생각합니다 ... – MURATSPLAT

3

당신은이를 사용할 수 있습니다

myApp.factory("mainData", function($http,$q) { 
    var def = $q.defer() 
    $http.get('gethome.php').then(function(data){ 
     def.resolve(data) 
    }); 
    return def.promise; 
}); 

myApp.controller("HomeCtrl", function($scope, mainData) { 
    mainData.then(function(data) { 
    $scope.home = data; 
    }); 
});