2016-08-30 3 views
1

나는 $ routeProvider 내에서 3 가지 해결 된 함수를 가지고있다. 내 질문은 그 HTTP 요청 응답을 얻으려면 예를 들어로드 함수 내에서 getData 함수를 사용할 수 있습니다!

또한 getData가 완료 될 때까지 기다렸다가로드로 이동합니까? 그것들을 순서대로하고 약속을 기다리고 있습니까? 내가 어떻게해야합니까

Error: [$injector:unpr] http://errors.angularjs.org/1.4.12/$injector/unpr?p0=getDataProvider%20%3C-%20getData 

콘솔

에서이 오류를 얻을 위

$routeProvider.when = function(path, route) { 
     route.resolve = { 
      getData: ['$http', function ($http) { 
       var http = $http({ 
        method: 'POST', 
        url: 'a URL', 
        data: { 
         route: "/something" 
        }, 
        headers: { 
         'something': 'anything' 
        } 
       }); 
       return http; 
      }], 
      load: [ 
       'getData', 
       function(getData) { 
        console.log(getData); 
        // I'm Actually returning a promise here so no problem at all. 
       } 
      ], 
      prefData: [ 
       '$preflightService', 
       function($preflightService) { 
        console.log('Preflight Run'); 
        return $preflightService.run(); 
       } 
      ], 
     }; 
     return originalWhen(path, route); 
    }; 

이 코드를 사용!

어떻게 든 공급자를 정의해야합니까?

답변

1

각 해결 방법은 비동기 적으로 해결됩니다. 부하 약속 필요한 경우

loadData: ['$http', function($http) { 
     return $http({ 
     method: 'POST', 
     url: 'a URL', 
     data: { 
      route: "/something" 
     }, 
     headers: { 
      'something': 'anything' 
     } 
     }).then(function(response){ 
     // getData result available here 
     return // Return the load promise here 
     }); 
    } 

, 당신은 성공 핸들러를 첨부 할 수 있습니다 (.then(function(){}) : 당신은 '부하'요청을 해결하기위한 'GetData의'에 의해 반환 된 데이터를 원하는 경우, 하나의 해결,이 같은 것을 만들 와.

+0

감사합니다! 그것은 완벽하게 작동 컨트롤러에서 사용할 수

return { getData: getResp, loadedData: loadResp } 

같은 GetData의 결과와 부하의 결과를 모두 포함하는 사용자 정의 개체를 반환! – mamsoudi