У меня есть страница, где пользователь вводит исходные данные, после чего он нажимает кнопку "Рассчитать". И при щелчке должно появиться gif-изображение с загрузчиком, когда выполняются вычисления. Как только результат будет готов, gif-изображение должно исчезнуть, и результат должен быть отображен на странице. Вот код, который я использую:
$scope.loading=false; //initially the img is invisible
$scope.calc=function(){
$scope.loading=true;//make the img visible
var result=MyService.calc(input_data); //processing data
$scope.result=result;
$scope.loading=false;//hide the img
}
И HTML-образ определяется следующим образом:
<div class="span1">
<div ng-if="loading"><img ng-src="img/ajax-loader.gif"></div>
</div>
Это ожидаемый порядок вещей. Но на самом деле он работает следующим образом: после нажатия "Вычислить изображение" не появляется, и через некоторое время, в течение которого выполнялись вычисления, изображение отображается и экранируется.
Расчеты выполняются в сервисе.
В чем проблема? Я уже пытался сделать $q.defer()
в службе, которая решает с результатом. А затем в результате отображения контроллера в функции promise.then
. Но это не сработает.
Для этого используйте $timeout
. Модель не обновляется в середине исполнения
JavaScript
$scope.calc=function(){
$scope.loading=true;//make the img visible
$timeout(function(){
var result=MyService.calc(input_data); //processing data
$scope.result=result;
$scope.loading=false;//hide the img
});
}
($timeout
должно быть введено зависимостями точно так же, как $scope
)