2013-07-09 10 views
13

Ich habe eine Funktion in meinem Controller, der wie folgt aussieht:Wie kann ich einen Parameter an eine ng-click-Funktion übergeben?

AngularJS:

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

Ich will es allgemein halten, indem Sie den Namen der Klasse vorbei, die ich wechseln will:

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

Aber myClass wird nicht an die Winkelfunktion übergeben. Wie kann ich das zur Arbeit bringen? Der obige Code funktioniert, wenn ich es so schreibe:

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

Aber das ist offensichtlich nicht allgemein. Ich möchte nicht in der Klasse myClass fest codieren.

+0

Scheint 'myClass' ist eine einfache Zeichenfolge, anstatt eine Variable? Im Ausdruck 'toggleClass (myClass)' sollte myClass eine Variable im Bereich sein, oder sie als String 'myClass' übergeben. – Chandermani

Antwort

27

In der Funktion

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

$scope.class hat nichts mit dem Paramter class zu tun. Es ist buchstäblich eine Eigenschaft auf $scope namens class. Wenn Sie die Eigenschaft auf $scope zugreifen möchten, die durch die Variable class identifiziert ist, müssen Sie das Array-Stil Accessor verwenden:

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

Beachten Sie, dass dies nicht Angular spezifisch ist; So funktioniert JavaScript. Nehmen Sie das folgende Beispiel:

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

Auch den Code

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

die Annahme macht, dass es eine Variable auf dem Umfang, z.B. $scope.myClass, die zu einer Zeichenfolge mit dem Namen der Eigenschaft ausgewertet wird, auf die Sie zugreifen möchten. Wenn Sie buchstäblichmyClass im String übergeben wollen, dann würden Sie brauchen

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

Das Beispiel macht es nicht Super klar, welche Sie suchen (da gibt es eine Klasse myClass auf der Oberseite benannt div).

+0

Dies ist die beste Antwort auf eine Frage, die ich jemals auf dieser Seite gesehen habe (und es gibt eine Menge großartige Antworten). Sehr klar, sehr knapp. Vielen Dank! –

+0

Glücklich, geholfen zu haben! Wie ich kürzlich erwähnt habe, fühlen Sie sich frei, [ping mich] (http://brandontilley.com/contact.html), wenn Sie weitere Fragen haben. –

+4

Ist 'class' kein reserviertes Schlüsselwort in Javascript? Ich bin mir ziemlich sicher, dass das IE einbrechen würde. –

Verwandte Themen