2015-08-21 2 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

Try использование $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

Поскольку вы (и ОП) используете $ http, угловой заботится о том, чтобы убедиться, что обратный вызов успеха вызван в угловом контексте. В некоторых версиях углового кода этот код генерирует исключение (дайджест уже выполняется). –

+0

Ok thx. Так почему это не работает? Лучше всего использовать $ q.all() или что-то еще происходит? Мне никогда не приходилось использовать $ scope. $ Apply() в моем обратном вызове успеха, чтобы заставить вещи работать, поэтому я немного смущен. – csmithmaui

2

Путь ваш код написан, я не ожидал бы значение $ scope.pizzaList, изменились между моментом, когда вы установите его и при оценке его в конце. Он будет изменяться только при вызове метода setPizzaStatus(), и даже тогда он будет изменяться только после сообщения в url1, а get from url2 вернулся с вашего сервера.

Смежные вопросы