2013-04-17 22 views
8

Zmiany DOM ze sterowników angularjs nie są dobrą praktyką. W mojej aplikacji po kliknięciu na link zmieniam klasę elementu html wewnątrz ngView. zamierzonym zachowaniem jest to, że mam trzy divy i zmieniam się, jeśli środkowy jest pokazany, czy nie. Robię to ze sterownika. Czytałem, że manipulowanie DOMem powinno odbywać się zgodnie z dyrektywą, ale mój umysł nie jest wystarczająco szeroki, aby znaleźć rozwiązanie. Proszę, jeśli masz sugestię, będę zadowolony.Zmiana CSS z AngularJS

Odpowiedz

9

Użyj ng-class.

np

http://jsfiddle.net/rd13/eTTZj/75/

app = angular.module('myApp', []); 

app.directive("click", function() { 
    return function(scope, element, attrs) { 
     element.bind("click", function() { 
      scope.boolChangeClass = !scope.boolChangeClass; 
      scope.$apply(); 
     }); 
    }; 
}); 

Niektóre HTML:

<div id="page"> 
    <div>One</div> 
    <div ng-class="{'my-class':boolChangeClass}">Two</div> 
    <div>Three</div> 
    <button click>Click me</button> 
</div> 

Po kliknięciu przycisku klasa środkowym div zmienia się w zależności od wartości boolen ustawiony w swoim zakres.

+0

Dziękujemy! Więc nie potrzeba wiele refaktoryzacji :) –

+1

@MartinPalis ta odpowiedź jest częściowo poprawna. Powinieneś używać ng-class .. Ale zamiast niestandardowej dyrektywy kliknięć powinieneś używać ng-click ... – ganaraj

+0

Dziękuję ganaraj, masz rację. –