2015-08-21 78 views
0

情況就像下面的代碼。我想在調用函數時更改$ scope.pizzaList和$ scope.selectedPizza的值,但似乎不會更改。我想這是$ scope的深度,但我沒有得到它。如何使這些值得到更新?提前致謝!

$scope.pizzaList = "some initial value"; 
$scope.selectedPizza = "some initial value"; 

$scope.setPizzaStatus = function (setStatus) { 

    $http.post('url1', { userID: $scope.pizzaioloID, pizzaID: $scope.selectedPizzaID, statusNum: setStatus }). 
    then(function(response) { 

     $http.get("url2") 
     .success(function (response) { 
      $scope.pizzaList = response; 
     }); 

     $http.get("url3") 
     .success(function (response) { 
      $scope.selectedPizza = response[0]; 
     }); 

    }, function(response) { 

     console.log("Error"); 
    }); 
} 

$scope.pizzaList // doesn't get updated 
$scope.selectedPizza // doesn't get updated 
+0

您還應該添加第二個錯誤日誌記錄功能,以獲取url2&3,以確保它們的處理方式與您對帖子的處理方式相同。另外,通常你在你的範圍變量中放入response.data或類似的東西。 – Mike

回答

4

嘗試使用$q.all()

$q.all([ 
    $http.get("url2"), 
    $http.get("url3") 
]).then(function(values){ 
    $scope.pizzaList = values[0]; 
    $scope.selectedPizza = values[1];//or values[1][0], It depends on data format; 
}, function(error){ 
    //error processing; 
}); 

不要忘記添加$q服務控制器;

+0

謝謝!這個問題不在這個代碼中。問題是我沒有從後端返回任何東西,因此$ http.post的那部分從未被執行。 –

+0

@StefanPrifti無論如何,我希望它將來對你有用=) – user3335966

-2

當您發出Get請求時,您的Javascript代碼會輸入「其他任務」。所以有時候當前的作用域不會按預期更新。嘗試通過調用「應用」,這樣的更新範圍:

$http.get("url2") 
.success(function (response) { 
    $scope.pizzaList = response; 
    $scope.$apply(); //or $scope.$applyAsync(); 
}) 
+0

對於那些低估了這個的人,爲什麼要調用$ scope。$ apply()這裏有個壞主意? – csmithmaui

+0

由於您(和OP)正在使用$ http,因此angular正在考慮確保在角度上下文中調用成功回調。在某些角度版本中,此代碼會拋出異常(摘要已在進行中)。 –

+0

好的thx。那爲什麼它不工作?是使用$ q.all()還是別的什麼的最佳實踐?我從來不必使用$ scope。$ apply()在我的成功回調中讓事情起作用,所以我有點困惑。 – csmithmaui

2

你的代碼寫我不希望$ scope.pizzaList值的方法有,當你設置它,當你評估它之間改變最後。它只會在你調用setPizzaStatus()方法時被改變,即使這樣它只會在你的服務器返回到url1和從url2獲得後纔會改變。