我想在视图显示之前得到一些数据,(解决)。但部分数据取决于另一个承诺的结果。我从$stateParams
获得作业id(Index),并在我的服务中查找数据。一旦完成,我就从这个结果(作业)中查找设置和楼层(每个都来自不同的服务)。两人都做出了承诺。
我想出了一个办法:
jobinfo: function(Jobs, Floor, JobSetting, $stateParams, $q) {
var defer = $q.defer();
Jobs.getByIndex($stateParams.index)
.then(function(job) {
console.log('got jobs');
$q.all({floors: Floor.getByJob(job), settings: JobSetting.getByJob(job)})
.then(function(info) {
console.log('got info');
defer.resolve([job, info.floors, info.settings]);
});
});
return defer.promise;
}
镜头2:
jobinfo: function(Jobs, Floor, JobSetting, $stateParams, $q) {
return Jobs.getByIndex($stateParams.index)
.then(function(job) {
console.log('got jobs');
return $q.all({floors: Floor.getByJob(job), settings: JobSetting.getByJob(job)})
.then(function(info) {
console.log('got info');
return [job, info.floors, info.settings];
});
});
}
两个都失败了。我甚至连一分钱都拿不回来。我省略了代码的其余部分,显然它们包含在以下代码中:
resolve: {
...
}
并在正确的地方进行定义。
2条答案
按热度按时间q35jwt9p1#
我喜欢把解析器分开。
您可以通过以下方式在每个解析器上注入值:
来自UI-路由器文档:
Resolve属性是一个Map对象。Map对象包含以下键/值对
[.]
如果是函数,则注入该函数,并将返回值视为依赖项。如果结果是承诺,则在示例化控制器并将其值注入控制器之前对其进行解析。
gcmastyq2#
尝尝这个