angular度ng-if或ng-show响应慢(2秒延迟?)

当请求忙时,我试图在button上显示或隐藏加载指示器。 我通过更改$ scope.loadingvariables在加载请求或加载完成时使用angular来实现。

$scope.login = function(){ $scope.loading = true; apiFactory.getToken() .success(function(data){ }) .error(function(error){ }) .finally(function(){ $timeout(function() { $scope.loading = false; }, 0); }); }; 

在前端:

 <button ng-disabled="loading" class="button button-outline button-positive" type="submit"> Log in <span ng-if="loading" class="ion-refreshing"></span> </button> 

这工作正常,但加载图标(离子刷新)显示约2秒,而$ scopevariables立即更新。 我试过$ scope。$ apply,但是这似乎并不是什么问题,范围在请求之后立即更新。 这只是图标没有足够快的响应。

感谢帮助我理解这一点!

尝试删除ngAnimate,如果你不是从你的应用程序configuration和index.html页面使用它:

 angular.module('myApp', [...'ngAnimate',...]) 

@Spock; 如果您仍然需要使用ngAnimate,请保持您的应用程序configuration不变,只需添加以下CSS:

 .ng-hide.ng-hide-animate{ display: none !important; } 

这会在满足条件后直接隐藏animation图标。

正如你所看到的,我们正在设置.ng-hide-animate隐藏。 这是等待animation完成的原因。 您可以将animation添加到隐藏事件中,因为类名隐含而不是隐藏它,如上例所示。

我遇到了同样的问题,通过使用带有“隐藏”类名的ng-class来隐藏元素,而不是使用ng-if或者ng-show / ng-hide。

我在这里find了一些解决scheme,但对我来说最好的是重写.ng-animate类的样式:

 .ng-animate.no-animate { transition: 0s none; -webkit-transition: 0s none; animation: 0s none; -webkit-animation: 0s none; } 

在html中:

 <button ng-disabled="loading" class="button button-outline button-positive" type="submit"> Log in <span ng-if="loading" class="ion-refreshing no-animate"></span> </button> 

这是一个例子: http : //jsfiddle.net/9krLr/27/

我希望能帮助你。

我遇到了类似的问题,我用$scope.$evalAsync()来强制更新绑定。

它像一个魅力。

避免使用$scope.$apply因为它可能与已经运行的$ digest阶段冲突。

 if(selectedStatistics.length === 0 || selectedWorkgroups.length === 0){ ctrl.isSaveDisabled = true; $scope.$evalAsync(); } else{ ctrl.isSaveDisabled = false; $scope.$evalAsync(); } 

在angular度版本1.5.x中添加$scope.$apply()在条件改变之后,对于我来说做的工作就是一个示例函数

 $scope.addSample = function(PDF) { var validTypes ="application/pdf"; if(PDF.type == validTypes) { //checking if the type is Pdf and only pdf $scope.samplePDF= PDF.files[0]; $scope.validError = false; $scope.$apply(); } else { $scope.validError = true; $scope.samplePDF= null; $scope.$apply(); } }