用例
使用路由提供程序,在解析中返回 $promise 将避免在 UI 加载后弹出数据。但是,我在处理两个不同的资源调用并将其作为单个数组返回时遇到了问题。
当前实现
当前的实现有效,但要求 Controller 需要两个资源。
var app = angular.module('app', []);
app.config(function($routeProvider) {
$routeProvider
.when('/resource/:id', {
templateUrl: 'partials/resource.html',
controller: ResourceController,
resolve: {
parentResource: function($route, SingleResource) {
return SingleResource.get({ id: $route.current.params.id }).$promise;
},
childResources: function($route, ChildResource) {
return ChildResource.get({ id: $route.current.params.id }).$promise;
}
}
});
});
但是,我想做的是为 ResourceController
提供一个数组 Resource
,该数组由 parentResource
和 childResource
,其中数组中的第 0 项是 parentResource
。
想法
这就是我的想法,但我不知道在 resolve 中返回什么?如果我返回结果,路由将改变并传递一个空数组。
var app = angular.module('app', []);
app.config(function($routeProvider) {
$routeProvider
.when('/resource/:id', {
templateUrl: 'partials/resource.html',
controller: ResourceController,
resolve: {
Resource: function($route, SingleResource) {
var resources = [];
SingleResource.get({ id: $route.current.params.id })
.$promise.then(function(parent)
{ resources.splice(0, 0, parent); })
.catch(function(error) { alert('error!'); })
ChildResource.get({ id: $route.current.params.id })
.$promise.then(function(children)
{ resources = resources .concat(children); })
.catch(function(error) { alert('error!'); })
return ???? // Can I return a $promise here?
}
}
});
});
问题
我怎样才能得到我的 ResourceController 签名 然后我们的想法是让 Controller 拥有这个签名:
var ResourceController = function($scope, parentResource, childResources) { ... }
到
var ResourceController = function($scope, resources) { ... }
通过返回 $promise?
最佳答案
您可以使用 $q.all 返回一个 promise 数组
var resources = [];
resources.push(SingleResource.get({ id: $route.current.params.id }).$promise);
resources.push(ChildResource.get({ id: $route.current.params.id }).$promise);
return $q.all(resources) // You return an array of promises
关于javascript - 从 AngularJS 中的两个资源调用返回 $promise 以延迟路由更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23432938/