目前我的代码如下:
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进行如此多的注入?此外,我不需要拥有所有不同的解决方案,如果可能的话,我想将这些结合在一起。
答案 0 :(得分:1)
您可以使用$ q.all
resolve: {
myDate: function($q, tes) {
return $q.all([tes.getAdminTestLevel(), ... , tes.getTestsTopics()]);
}
}
myData
只有在数组中的所有承诺解析后才会解决
$q.all
将为您提供一系列可在控制器中使用的结果,您可以通过索引访问它们,因此它不如普通注入方便。
答案 1 :(得分:1)
您可以尝试使用$q.all(promises)
来自($q)的文档:
$q.all(promises);
将多个promises组合成一个promise,在所有输入promise都被解析后解析。
因此您可以在承诺数组中组合多个承诺并等待解决。你的代码看起来像:
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)
返回一个将使用数组/值哈希值解析的单个promise,每个值对应于promises数组/ hash中相同索引/键的promise
您可以访问注入控制器的required_data
的结果
例如,adminTestLevel
将在required_data[0]
处提供...依此类推,与您在路由器中创建承诺数组的顺序相同。