2014-01-14 94 views
33

有沒有什麼辦法來檢查一個值是否在角模板中的數組?我期待這樣的事情:檢查角模板中的數組值?

<div ng-class="{'myClass':1 in [1,2,5]}">Yay</div> 

如果myClass應用,如果1是在數組中。

這可能嗎?

另外,Angularjs使用了什麼樣的模板引擎?我在哪裏可以找到它的文檔?每當我嘗試搜索(甚至是官方文檔)時,我似乎都會看到有關指令或數據綁定的文檔。

回答

64

您可以使用indexOf()測試一個值是否在一個數組,然後用它你ngClass裏面像這樣(有條件地添加「的NewClass」):

<div ng-class="{'newclass':([1,2,5].indexOf(2) > -1)}">Yay</div> 

或者更可能你會想對你的範圍陣列測試:

<div ng-class="{'newclass':(tarray.indexOf(1) > -1)}">Yay</div> 

假設,例如,你已經在你的控制器宣佈tarray

$scope.tarray=[1,2,5]; 

demo

至於模板引擎,它內置於角。所以沒有什麼獨立的東西可以搜索。但是這裏是top level template docs,並且有一些很好的video tutorials here涵蓋了模板(例如第一個是數據綁定)以及更多。

+0

謝謝,正是我正在尋找 - 沒有意識到我可以在模板中使用多少JS。 – Anonymous

+1

雖然 –

4

試試這個:

ng-class="{'myClass': !!~[1,2,5].indexOf(1)}" 

如果值不在數組你得到0,因此!! 你得到假

+0

indexOf在物品不在數組中時返回-1 –

+0

@Gruff Bunny〜[1,2,5] .indexOf(3)與您獲得的位操作0 – Whisher

+0

Oops - 沒有看到沒有 - 我很抱歉 –

13

你可以創建一個過濾器來檢查這個。喜歡的東西:

app.filter('inArray', function() { 
    return function(array, value) { 
     return array.indexOf(value) !== -1; 
    }; 
}); 

然後你就可以在你的模板中使用這樣的:

<div ng-class="{'newclass': tarray | inArray : 1}">Yay</div> 

的優勢是,它讓你的模板更易讀。

+2

好的解決方案,但我需要在過濾器表達式周圍添加括號以避免角度語法錯誤。 '

Yay
' – dansalmo

+0

如果'array'是一個'Array'對象(它可能並不總是一個數組,尤其是在初始化時),那麼您可以添加驗證:'return Array.isArray(array)&& array.indexOf(value)!= = -1;'。 –