Используйте функцию разрешения $routeProvider внутри другой
У меня есть три функции разрешения обещаний внутри моего $routeProvider. Мой вопрос заключается в том, могу ли я использовать функцию 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, для разрешения запроса load, делали одно разрешение, примерно так:
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
}
который будет доступен в контроллере.