2015-06-27 20 views
10

Ho un elemento all'interno del mio corpo che è invisibile. Voglio attivare una funzione quando diventa visibile. Qual è la migliore pratica per questo?AngularJS: watch element visibilty

qui è un plunker per un lavoro di esempio. In questa parte di codice, la finestra può scorrere fino al div "#hiddenObj" facendo clic sul pulsante. ma il primo clic, solo il div diventa visibile e la seconda volta la finestra scorre.

risposta

29

ng-hide = false aggiunge effettivamente "display: none" all'elemento che significa che l'elemento non avrebbe alcuna posizione in cui scorrere nel DOM.

Quindi, solo impostare un $ orologio sullo stato visibile dell'elemento, come di seguito

var scrollElement = "#hiddenObj"; 
$scope.$watch(function() { return angular.element(scrollElement).is(':visible') }, function() { 
    scrollTo(scrollElement); 
}); 

vedere http://plnkr.co/edit/BGBygAWdwU6zv7anx3qO?p=preview

+1

Non voglio obj nascosto posto, voglio qualcosa come $ watch on element, quando ng-hide = "true" la finestra scorre verso l'oggetto. – parand87

+1

mi hai salvato. Grazie. – parand87

+0

Salvato anche me, grazie :)) – Yulian

3

angolare aggiunge una classe "ng-nascondere" ad un elemento che è nascosto con ng-pelle/ng-show.

Un modo per vedere se c'è stato un cambiamento è aggiungere un osservatore per la classe dell'elemento e controllare se contiene "ng-hide".

scope.$watch(function() { return element.attr('class'); }, function(newValue) { 
    if (newValue.match(/ng-hide/) !== null) { 
     // Element is hidden. 
    }  
});