Podejrzewam, że tytuł jest całkiem jasny, o co proszę. Stworzyłem to skrzypce: http://jsfiddle.net/Sourabh_/HB7LU/13142/
W skrzypcach próbowałem replikować scenariusz async
. To tylko przykład, ale w wywołaniu AJAX, jeśli nie używam $scope.$apply()
, lista nie jest aktualizowana. Chcę wiedzieć, czy można bezpiecznie używać $scope.$apply()
za każdym razem, gdy wykonuję wywołanie AJAX, aby zaktualizować listę, czy jest jakiś inny mechanizm, z którego mogę skorzystać?
kod Pisałem do powtórzenia scenariusza (tak samo jak w skrzypcach):
HTML
<div ng-controller="MyCtrl">
<li ng-repeat="item in items">
{{item.name}}
</li>
<button ng-click="change()">Change</button>
</div>
JS
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.items = [{name : "abc"},{name : "xyz"},{name : "cde"}];
$scope.change = function(){
test(function(testItem){
$scope.items = testItem;
//$scope.$apply();
})
}
function test(callback){
var testItem = [
{name : "mno"},
{name : "pqr"},
{name : "ste"}
];
setTimeout(function(){callback(testItem)},2000);
}
}
Czy próbujesz naśladować wywołanie REST? Jeśli tak, to: żądanie HTTP http zwraca obietnicę, której można użyć w kontrolerze za pomocą .then() w celu zmiany zakresu. Nie ustawiaj nowego zakresu i $ apply() wewnątrz wywołania REST. Ponieważ to, co teraz robisz, jest bezcelowe. –
Wiem, że to już nie pomaga, ale Angular 2.0 ma naprawić tę okropność. – CodingIntrigue
Każda zmiana zakresu przebiega przez podsumowanie. Limit czasu w wywołaniu funkcji API pachnie dla mnie. Co jeśli serwer potrzebuje więcej czasu? Co jeśli zostanie on wywołany 2 lub 3 razy? –