我正試圖調用多個$ 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個呼叫合併到1個地方並承諾承諾。我想我需要返回數據,但是如果我可以在工廠中定義控制器的範圍,那將是相當不錯的。我仍然以角度得到我的方位,所以任何/所有的指導將非常感激。謝謝閱讀!!
您是否嘗試過使用$ q.all() ? (像這裏:http://fdietz.github.io/recipes-with-angular-js/consuming-external-services/deferred-and-promise.html) – 2014-08-29 14:47:00