這裏是我的HTML代碼片段。在AngularJs中使用Expression動態生成ng類的變量
<div ng-repeat="boxName in boxNameList">
<div ng-class="myBoxes.{{boxName}}">{{boxName}}</div>
</div>
我所試圖做的事: 我創建了將在使用上面寫片斷屏幕的頂部3個div元素。每個div元素將被賦予一個使用css的框形狀。盒子(div)可以有紅色作爲背景或黑色作爲背景。
CSS的兩種顏色是:
.redBackground{
background-color: red;
}
.blackBackground{
background-color: black;
}
這裏是我的控制器的一個片段:
$scope.boxNameList=['Box1','Box2','Box3'];
$scope.myBoxes={
Box1: "redBackground",
Box2: "blackBackground",
Box3: "blackBackground"
}
在這個例子中我已經$scope.myBoxes
爲靜態的Json但在運行時我打算生成Json代碼,以便我可以動態地將背景顏色分配給我的框。
的問題,我面對:那麼問題是,我無法看到盒子顏色可言。在這種情況下,你可以看到ng-class變量名也是動態生成的。如果我不使用ng-repeat並且不動態生成ng-class變量名,那麼它工作正常。例如,當我動態地更改變量myBoxes.Box1
myBoxes.Box2
和myBoxes.Box3
的值時,下面給出的代碼片段完好。
<div ng-class="myBoxes.Box1">Box1</div>
<div ng-class="myBoxes.Box2">Box2</div>
<div ng-class="myBoxes.Box3">Box3</div>
但是如果我生成納克級可變動態"myBoxes.{{boxName}}"
那麼它不會表現得像一個變量。我確信有一個更好的方法來實現我正在嘗試做的事情,但是我沒有發現經過數小時和數小時的谷歌搜索/試驗和錯誤。如果有人能幫助我會很高興。
真棒!奇蹟般有效。但我仍然想知道爲什麼它通過使用數組表示法訪問Json對象值而不是使用點表示法訪問Json對象的常規方式。 我是一個javscript新手,我很抱歉如果我提出一個非常基本的問題。 – Durin 2013-02-22 09:17:05
首先,'myBoxes。{{boxName}}'在Angular中不是有效的表達式,但是'myBoxes.boxName'和'myBoxes [boxName]'是。在Javascript中,這些表達式是相同的:'myBoxes.boxName','myBoxes ['boxName']'和'var name ='boxName'; myBoxes [name];'這意味着當你想要一個對象的屬性,但你不知道屬性名是什麼時,你可以使用數組表示法來代替變量。 – 2013-02-22 09:27:51
編輯: 哦!那麼在這種情況下''{myBoxes'。 + name}}'也應該爲我工作,因爲它是一個有效的角度js表達式。但它不適合我。 感謝您的解釋。 – Durin 2013-02-22 09:46:08