Javascript AngularJs控制器解析依赖项
我在解决模态控制器中的多个参数时遇到问题,例如:Javascript AngularJs控制器解析依赖项,javascript,angularjs,Javascript,Angularjs,我在解决模态控制器中的多个参数时遇到问题,例如: controller:'MyController', controllerAs:'vm', 决心:{ resolveInfo:函数(REST){ var resolveInfo={} 返回REST.doGet('/things/')。然后( 功能(thingsResponse){ resolveInfo.things=thingsResponse.data; 返回REST.doGet('/stuff1/'+'/mystuff/'+resolveI
controller:'MyController',
controllerAs:'vm',
决心:{
resolveInfo:函数(REST){
var resolveInfo={}
返回REST.doGet('/things/')。然后(
功能(thingsResponse){
resolveInfo.things=thingsResponse.data;
返回REST.doGet('/stuff1/'+'/mystuff/'+resolveInfo.things[0].id)。然后(
功能(填充1响应){
resolveInfo.stuff1=stuff1Response.data;
返回REST.doGet('/stuff2/'+'/mystuff/'+resolveInfo.stuff1[0]+'/'+resolveInfo.things[0].id)。然后(
功能(stuff2Response){
resolveInfo.stuff2=stuff2Response.data;
返回解析信息;
}
);
}
);
}
)
}
然后在“MyController”中,我从resolveInfo中取出这三个对象。
但我希望这样的事情会奏效:
controller:'MyController',
controllerAs:'vm',
决心:{
事物:功能(休息){
返回REST.doGet('/things/')。然后(
功能(thingsResponse){
返回thingsResponse.data;
}
)
},
材料1:功能(休息、事物){
返回REST.doGet('/stuff1/'+'/mystuff/'+things[0].id)。然后(
功能(填充1响应){
返回stuff1Response.data
}
);
},
Stuff 2:功能(休息、Stuff 1、事物){
返回REST.doGet('/stuff2/'+'/mystuff/'+stuff1[0]+'/'+things[0].id)(
功能(stuff2Response){
返回stuff2Response.data;
}
);
}
但这对“东西”大喊大叫
有没有办法做到这一点?当你想等待多个承诺时,你可以使用
$q.all([promise1,promise2,…])
,但是你想使用之前承诺的结果
基本重组可以解决您的问题:
function resolveInfo(REST) {
function getThings() {
return REST.doGet('/things/').then(
function (resp) {
return getStuff1(resp.data);
});
}
function getStuff1(things) {
return REST.doGet('/stuff1/mystuff/' + things[0].id).then(
function (resp) {
return getStuff2(things, resp.data);
});
}
function getStuff2(things, stuff1) {
return REST.doGet('/stuff2/mystuff/' + stuff1[0] + '/' + things[0].id);
}
return getThings();
}
因此,您在承诺处理程序
中返回承诺,然后
链接承诺。以下是有关此主题的适当文档:当使用ngRoute或ui router时,参数应立即返回其值或返回承诺。代码的问题是,在返回承诺之前,您正在等待承诺结束值,该值将无法正确解析
Javascript路由
下面是返回承诺的更新路线代码
controller : 'MyController',
controllerAs : 'vm',
resolve : {
things : function(REST){
return REST.doGet('/things/');
},
stuff1 : function(REST, things){
return REST.doGet('/stuff1/' + '/mystuff/' + things[0].id);
},
stuff2 : function(REST, stuff1, things){
return REST.doGet('/stuff2/' + '/mystuff/' + stuff1[0] + '/' + things[0].id);
}
}
Javascript控制器
下面是一个示例控制器,可以使用解析的参数
.controller('MyController', function(things, stuff1, stuff2) {})
您需要使用$q.all()…它将等待所有资源后才能继续。这是我正在寻找的,我不知道已解析的数据或承诺。因此我需要将
东西[0]。id
更改为东西。数据[0]。id
或在东西:函数(REST)中使用$q
返回带有已处理数据的新承诺。