Така че исках да изпълня 2 http извиквания, за да получа някои групи и въпроси от моя сървър и да разреша и двете в routeprovider, така че съответният контролер да не се зареди, преди да имам съответните данни.
В другите си контролери винаги работех с обект initalData, за да съхранявам данните.
Решаващата част:
resolve: {
initialData: ["GroupsService" "QuestionsService", function (GroupsService, QuestionsService) {
return {
questions: QuestionsService.getAll(),
groups: GroupsService.getAll()
}]
}
Когато се опитах да осъществя достъп до данните в контролера, използвайки съответно initialData.questions и initialData.groups, обаче получих 2 обещания вместо данните, въпреки че обратното извикване от http беше регистрирано преди контролерът да бъде инстанциран.
QuestionsCtrl.$inect = ["DialogsService", "initialData", "QuestionsService"];
function QuestionsCtrl(DialogsService, questions, groups, QuestionsService) {
//Initialdata object which has 2 Promise properties
//This logs AFTER the callback in both http callbacks
console.log('controller initialized', initialData);
Когато замених кода с това (не използвах обект initialData, вместо това върнах два други обекта, той свърши работа:
resolve: {
questions: function (QuestionsService) {
//$http call for all questions
return QuestionsService.getAll();
},
groups: function (GroupsService) {
//$http call for all groups
return GroupsService.getAll();
}
}
Някой има ли някакво логично обяснение защо в първия случай получих обещания (въпреки че данните действително присъстваха в клиента), а вторият работи безупречно?