В настоящее время мой код выглядит так:
resolve: {
adminTestLevel: ['testService', (tes: ITestService) => {
return tes.getAdminTestLevel();
}],
adminTestStatus: ['testService', (tes: ITestService) => {
return tes.getAdminTestStatus();
}],
adminTestType: ['testService', (tes: ITestService) => {
return tes.getAdminTestType();
}],
adminTestGradeType: ['testService', (tes: ITestService) => {
return tes.getAdminTestGradeType()
}],
exams: ['testService', (tes: ITestService) => {
return tes.getExams();
}],
examTypes: ['testService', (tes: ITestService) => {
return tes.getExamTypes();
}],
testOrderBy: ['testService', (tes: ITestService) => {
return tes.getTestOrderBy();
}],
topics: ['testService', (tes: ITestService) => {
return tes.getTestsTopics();
}],
},
Есть ли способ, которым я мог бы упростить это, чтобы у меня не было так много инъекций ITestService? Также мне не нужно иметь все разные разрешения, и, если возможно, я хотел бы объединить их в один.
вы можете попытаться использовать $q.all(promises)
из документации для ($ q):
$q.all(promises);
Объединяет несколько обещаний в единое обещание, которое разрешается, когда все вступительные обещания разрешаются.
поэтому вы можете комбинировать несколько обещаний в массиве обещаний и ждать решения. вы можете выглядеть так:
resolve: {
required_data: function($q, testService) {
return $q.all([
testService.getAdminTestLevel(),
testService.getAdminTestStatus(),
testService.getAdminTestType()
// and so on for all other promises
])
}
}
затем в вашем контроллере, также из той же документации
$q.all(promises)
Возвращает одно обещание, которое будет разрешено с помощью массива/хэша значений, каждое значение, соответствующее обещанию с тем же индексом/ключом в массиве обещаний/хеш
вы можете получить доступ к результату из required_data
введенных в ваш контроллер.
например, adminTestLevel
будет доступен по required_data[0]
... и т.д., в том же порядке вы создали свой массив обещаний в маршрутизаторе.
Вы можете использовать $ q.all
resolve: {
myDate: function($q, tes) {
return $q.all([tes.getAdminTestLevel(), ... , tes.getTestsTopics()]);
}
}
myData
будет разрешаться только после того, как все обещания в массиве будут разрешены
$q.all
даст вам массив результатов, которые вы можете использовать в своем контроллере, вы можете получить к ним доступ по индексу, чтобы он был менее удобным, чем простая инъекция.