【发布时间】:2014-08-29 14:40:46
【问题描述】:
我试图在一个工厂中调用多个 $http 请求,我用它来清除多个输入数据并设置默认选择。一旦所有这三个都完成后,我想调用一个承诺来调用真实的表单数据(如果有的话,有时不会在这种情况下它什么都不做)来覆盖默认值。
所以这是我的尝试-
工厂 我建立了一个工厂来调用所有 3 个输入及其默认值(我正在单独发送它们,我现在无法更改)。它看起来像这样:
.factory("getDefaults", function() {
return {
instructions: function() {
$http({
method: "GET",
url: "/getStringDropdown/materials"
})
.success(function(data, status, headers, config){
$scope.instructions.materials = data.text;
});
$http({
method: "GET",
url: "/getStringDropdown/reinforce"
})
.success(function(data, status, headers, config){
$scope.reinforce = data.options;
$scope.instructions.reinforce = $scope.reinforce[data.default];
});
$http({
method: "GET",
url: "/getStringDropdown/procedure"
})
.success(function(data, status, headers, config){
$scope.procedures = data.options;
$scope.instructions.procedures = $scope.procedures[data.default];
});
//return data here?
}
};
})
我的问题是 - 我必须在这里返回数据吗?我也可以在此处定义正在使用的范围(与实际控制器中相对)。我很确定这是错误的,但我找不到一个很好的例子来说明如何正确地构建这样的东西。
控制器中的调用
所以我的控制器我的想法是我会尝试这样的 -
getDefaults.instructions().then(function(){
//possible return data here
//AFTER data is flushed out call farm data
$http({
method: "GET",
url: "/getSavedFormData/formID"
})
.success(function(data, status, headers, config){
$scope.instructions.materials= data.materials;
$scope.instructions.procedures = $scope.procedures[data.procedure];
$scope.instructions.reinforce = $scope.reinfoce[data.reinforcement];
});
});
如此大的画面 - 我试图让这 3 个调用运行和填充,然后是第二个。我不确定什么可能是最好的方法,也可能不是最好的方法,工厂似乎是有意义的,因为它试图将 3 个调用合并到一个地方,并在它们全部完成后做出承诺。我在想我需要返回数据,但如果我可以在工厂中定义控制器的范围,那就太好了。我仍然对角度有所了解,因此非常感谢任何/所有指导。感谢阅读!!
【问题讨论】:
-
你试过使用 $q.all() 吗? (喜欢这里:fdietz.github.io/recipes-with-angular-js/…)
标签: javascript angularjs factory