2016-08-30 9 views
1

私は$ routeProviderの中に3つの解決約束関数を持っています。私の質問は、私はロード機能の中でgetData関数を使用してHTTP要求応答を得ることができますか?

また、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

各解決は非同期的に解決されます。あなたは「ロード」の要求を解決するために「のgetData」によって返されたデータが必要な場合は、その一つの解決作り、このような何か:

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結果とコントローラで利用できるようになります

return { 
getData: getResp, 
loadedData: loadResp 
} 

のような負荷の結果の両方を含むカスタムオブジェクトを返します。

+0

ありがとう!それは完璧に動作します! – mamsoudi

関連する問題