2015-11-03 4 views
0

Я пытаюсь показать тег div в форме, основанной на булевом флаге, который указан в ng-show. Но div не отображается вообще. Ниже я попытался, и он не работает. Спасибо за любую помощь!AngularJS - ng-show не показывает div тега условно?

контроль формы в MVC Вид:

<form name="payment" role="form" ng-submit="sendPayment()" ng-controller="PaymentCtrl"> 
     <div id="veil" ng-show="isProcessing == true"></div> 
     <div id="feedLoading" ng-show="isProcessing == true"> 
      <img src="~/images/ajax_loader_blue_64.gif" class="img-responsive center-block" /> 
     </div> 

     //Other form controls here 
</form> 

В Радиально-контроллера: Этот контроллер такой же, как тот, форма, используя который является «PaymentCtrl».

$scope.isProcessing = false; 

    $scope.setProcessing = function (loading) { 
     $scope.isProcessing = loading; 
    } 

    $scope.sendPayment = function() { 
     $scope.setProcessing(true); 
     //Other logic here 
     $scope.setProcessing(false); 
    }; 

Стили CSS для Div тегов:

#veil { 
position: absolute; 
top: 0; 
left: 0; 
height:100%; 
width:100%; 
cursor: not-allowed; 
filter: alpha(opacity=60); 
opacity: 0.6; 
background: #000000 url(http://www.wingo.com/angular/AngularShieldLogo.png) no-repeat center; 
} 

#feedLoading { 
position: absolute; 
top:200px; 
width:100%; 
text-align: center; 
font-size: 4em; 
color:white; 
text-shadow: 2px 2px 2px #021124; 
} 
+0

Что это «другая логика " часть? Кроме того - 'ng-show =" isProcessing "' все, что вам нужно - не нужно для этого '== true' – tymeJV

+2

Если вы делаете часть' // Другая логика здесь ', вы все равно устанавливаете ее в false в следующем утверждении синхронно с установкой его на истинные строки раньше. Таким образом, он работает так, как ожидалось. DOM не будет обновляться сразу после того, как вы установите значение true. – PSL

+0

Извините, но очень неясно '// Другая логика здесь – Appeiron

ответ

1

Вашего sendPayment, вероятно, что делает асинхронный вызов службы, который ждет, чтобы быть решен с помощью обещания. Ваш isProcessing boolean немедленно переключается в конце выполнения функции. Независимо от того, когда ваше обещание действительно разрешится, ваше логическое значение уже изменено.

Вы должны заменить свой isProcessing boolean после того, как ваше обещание вернется. Обязательно сбросьте его как в функции успешного выполнения, так и в функцию обратного вызова. Например, если ваш код использует обещание:

service.sendPayment() 
    .then(function() { 
      $scope.setProcessing(false); 
     }, 
     function(error) { 
      $scope.setProcessing(false); 
     }); 

Или, если вы используете $http в контроллере, вы можете использовать обернутые .success и .error обратные вызовы:

$http.post(url, data) 
    .success(function() { 
     $scope.setProcessing(false); 
    }) 
    .error(function (error) { 
     $scope.setProcessing(false); 
    }); 
+2

Вместо того, чтобы сбрасывать его с успехом и неудачами, это можно сделать в конце блока. Также для mentio.n они оба устарели вместо этого должны начать использовать то и поймать – PSL

+0

Спасибо. Он работает сейчас. Другая логическая часть вызывает веб-службу, которая выполнялась слишком быстро, что сделало ее похожей на тег div, который никогда не отображался. – Jyina

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