2015-08-21 61 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获得后才会改变。