2013-07-09 11 views
13

Mam funkcję w moim kontrolera, który wygląda następująco:Jak mogę przekazać parametr do funkcji ng-click?

angularjs:

$scope.toggleClass = function(class){ 
    $scope.class = !$scope.class; 
} 

chcę zachować to ogólnie przekazując nazwę klasy, który chcę, aby przełączyć:

<div class="myClass">stuff</div> 
<div ng-click="toggleClass(myClass)"></div> 

Ale myClass nie jest przekazywane do funkcji kątowej. Jak mogę to uruchomić? Powyższy kod działa, jeśli napiszę go tak:

$scope.toggleClass = function(){ 
    $scope.myClass = !$scope.myClass; 
} 

Ale to oczywiście nie jest ogólne. Nie chcę kodu twardego w klasie o nazwie myClass.

+0

Wydaje się, że 'myClass' jest prostym ciągiem, a nie zmienną? W wyrażeniu 'toggleClass (myClass)', myClass powinna być zmienną zakresu lub przekazywać ją jako ciąg 'myClass' – Chandermani

Odpowiedz

27

W funkcji

$scope.toggleClass = function(class){ 
    $scope.class = !$scope.class; 
} 

$scope.class nie ma nic wspólnego z paramter class. Jest to dosłownie własność na $scope o nazwie class. Jeśli chcesz uzyskać dostęp do nieruchomości na $scope że jest zidentyfikowane przez zmienną class, musisz użyć akcesor array-style:

$scope.toggleClass = function(class){ 
    $scope[class] = !$scope[class]; 
} 

pamiętać, że to nie jest specyficzny kątowe; tak działa JavaScript. Weźmy następujący przykład:

> var obj = { a: 1, b: 2 } 
> var a = 'b' 
> obj.a 
    1 
> obj[a] // the same as saying: obj['b'] 
    2 

Również kod

<div ng-click="toggleClass(myClass)"></div> 

czyni założenie, że istnieje zmienna na zakres, na przykład $scope.myClass, która zwraca ciąg znaków, który ma nazwę właściwości, do której chcesz uzyskać dostęp. Jeśli dosłownie chce przekazać w ciągu myClass, że trzeba

<div ng-click="toggleClass('myClass')"></div> 

przykładzie nie czyni go bardzo jasne, które szukasz (ponieważ istnieje klasa o nazwie myClass na szczycie div).

+0

To jest najlepsza odpowiedź na pytanie, które kiedykolwiek widziałem na tej stronie (i jest wiele świetne odpowiedzi). Bardzo jasne, bardzo zwięzłe. Dzięki wielkie! –

+0

Szczęśliwy, że pomógł! Jak już wspominałem ostatnio, zachęcamy do [ping] mnie (http://brandontilley.com/contact.html), jeśli masz dodatkowe pytania. –

+4

Czy "klasa" nie jest zastrzeżonym słowem kluczowym w javascript? Jestem prawie pewien, że złamie IE. –

Powiązane problemy