ionicframework guidelines framework docs classes angularjs angularjs-directive ionic-framework

angularjs - guidelines - angular ng-if o ng-show responde lento(¿retraso de 2 segundos?)



ionic platform (5)

Encontré algunas soluciones here , pero lo mejor para mí fue anular el estilo de la clase .ng-animate:

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

En 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>

Este es un ejemplo: http://jsfiddle.net/9krLr/27/

Espero ayudarte

Intento mostrar u ocultar un indicador de carga en un botón cuando una solicitud está ocupada. Lo hago con angular cambiando la variable $ scope.loading cuando se carga una solicitud o cuando se termina de cargar.

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

En la interfaz:

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

Esto funciona bien, pero el icono de carga (ion-refreshing) se muestra durante aproximadamente 2 segundos, mientras que la variable $ scope se actualiza de inmediato. Intenté aplicar $ scope. $ Pero eso no parece ser lo que está mal aquí, el alcance se actualiza muy bien e inmediatamente después de la solicitud. Es solo el icono que no responde lo suficientemente rápido.

Gracias por ayudarme a entender esto!


Estaba enfrentando un problema similar, utilicé $scope.$evalAsync() para forzar la actualización del enlace.

Funciona a las mil maravillas.

Evite usar $scope.$apply ya que puede entrar en conflicto con una fase de resumen de $ ya ejecutada.

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


Intenta eliminar ngAnimate si no lo estás utilizando desde la página de configuración de tu aplicación e index.html:

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

@Spock; si aún necesita el uso de ngAnimate, deje intacta la configuración de su aplicación y simplemente agregue el siguiente CSS:

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

Eso ocultará el icono animado inmediatamente después de que se cumpla su condición.

Como puede ver, estamos configurando .ng-hide-animate como oculto. Esto es lo que causa el retraso mientras espera que se complete la animación. Puede agregar una animación a su evento hide como lo indica el nombre de clase en lugar de ocultarlo como en el ejemplo anterior.


Tuve el mismo problema y lo resolví utilizando ng-class con el nombre de clase ''oculto'' para ocultar el elemento en lugar de usar ng-if o ng-show / ng-hide.


en la versión angular 1.5.x agregando $scope.$apply() después del cambio en la condición realizada el trabajo para mí aquí es una función de ejemplo

$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(); } }