2016-08-30 2 views
1

У меня есть три функции обещания решения внутри моего маршрутного маршрута. Мой вопрос в том, что я могу использовать функцию getData внутри функции загрузки, например, чтобы получить ответ HTTP-запроса!

Также будет угловой ждать окончания getData, затем загружается? Это делает их в порядке и ждет обещаний !?

$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); 
    }; 

Используя этот код выше, я получаю эту ошибку в консоли

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

Что я должен делать ?!

Должен ли я определить поставщика как-то !?

ответ

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

Смежные вопросы