【发布时间】:2015-09-02 21:33:42
【问题描述】:
我一直在为以下问题苦苦挣扎:
我想在视图显示之前获取一些数据,(解决)。但是有些数据依赖于另一个promise的结果。
它是这样的:我从 $stateParams 获取作业 ID(索引)并在我的服务中查找数据。完成后,从这个结果(作业)中,我可以查找设置和楼层(每个都来自不同的服务),都返回一个承诺。
到目前为止我想出了什么
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 次em>
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];
});
});
}
似乎都失败了,我什至没有收到console.log 的回复。
PS:我把其余的代码都省略了,显然它们被包裹在一个
中resolve: {
...
}
并在正确的位置定义。
有人能这么温柔地指出我正确的方向吗?
我最终得到的解决方案如下:(感谢 avcajaraville)
job: function(Jobs, $stateParams) {
return Jobs.getByIndex($stateParams.index);
},
floors: function(Floor, job) {
return Floor.getByJob(job);
},
settings: function(JobSetting, job) {
return JobSetting.getByJob(job);
}
【问题讨论】:
-
你能提供一个 JSFiddle 或 Plunkr 吗?另外,如果您在控制器中添加“jobinfo”依赖项,您会得到结果吗?您还可以检查“网络”选项卡以查看是否进行了解析调用
-
我没有进入控制器,jobinfo 被设置为依赖,但控制器永远不会被加载。看看我能不能把这个放在小提琴里
-
这个解析是抽象状态的一部分吗?
-
是的,我有一个抽象的 state('app'),这个是 state('app.plan')
-
您可能需要注入类似于@avcajaraville 答案的解析,但需要数据的任何子州除外。
标签: angularjs nested angular-ui-router promise resolve