2013-07-09 78 views
13

我有我的控制器的功能,看起來像下面這樣:如何將參數傳遞給ng-click函數?

AngularJS:

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

我想保持它一般通過傳遞,我想切換類的名稱:

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

myClass未被傳遞給角函數。我怎樣才能使這個工作?如果我這樣寫:

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

但是,這顯然不是一般的。我不想在名爲myClass的類中進行硬編碼。

+0

似乎'myClass'是一個簡單的字符串,而不是一個變量?在表達式'toggleClass(myClass)'中,myClass應該是作用域上的一個變量,或者將它作爲字符串'myClass'傳遞 – Chandermani

回答

27

在功能

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

$scope.class不會有什麼做的放慢參數class。這實際上是一個名爲class$scope上的財產。如果你想訪問$scope通過可變class確定的財產,你需要使用數組式訪問:

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

注意,這是沒有棱角具體;這正是JavaScript的工作原理。採取下面的例子:

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

此外,代碼

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

使得假設有關於您的範圍,例如,一可變$scope.myClass,其計算結果爲一個字符串,其中包含要訪問的屬性的名稱。如果您字面上希望字符串myClass的傳遞,你需要

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

的例子並不能使它超清晰,你正在尋找(因爲有一個在頂部命名myClassdiv)。

+0

這是我在這個網站上見過的問題的最佳答案(並且有很多很好的答案)。非常清楚,非常簡潔。非常感謝! –

+0

很高興有幫助!正如我最近提到的,如果您還有其他問題,請隨時[ping me](http://brandontilley.com/contact.html)。 –

+4

JavaScript中不是'class'保留關鍵字嗎?我很確定這會在IE中破解。 –