原文出處:https://segmentfault.com/a/11…
在開發中我們通常會遇到一種需求:一個元素在不同的狀態需要展現不同的樣子。
而在這所謂的樣子當然就是改變其css的屬性,而實現能動態的改變其屬性值,必然只能是更換其class屬性
這裡有三種方法:
第一種:通過資料的雙向繫結(不推薦)
第二種:通過物件陣列
第三種:通過key/value
下面簡單說下這三種:
第一種:通過資料的雙向繫結
實現方式:
function changeClass(){
$scope.className = “change2”;
}
<div class=”{{className}}”></div>
網上各種不推薦,說實話,既然angularJS雙向資料繫結這麼吊,為什麼不能通過這個來改變呢!查了下原由:“在controller涉及了classname在我看來是乎總是那麼詭異,我希望的是controller是一個乾淨的純javascript意義的object”,當然並沒有明文固定不能夠這麼使用的,而且反而我覺得這樣非常的方便,讓html中元素想怎麼變就怎麼變!同理中的img元素中的src就不可以通過別的來改變,但是通過這種方式就是可以的!
當然,這種方式也的確給人的感覺怪怪的,個人認為:可以不得已而為之~
第二種:通過字串陣列的形式來改變
實現方式:
function changeClass(){
$scope.className = true/false;
}
<div ng-class=”{true:‘zhende‘,false:‘jiade‘}[className]”></div>
實現很簡單,就是當className為真的時候class為zhende,相反則為jiade。
但是有一點不好的只能夠讓一個元素擁有兩種狀態,雖然這麼說!基本也是滿足所需了,我一般都用這個。簡單、直觀!
!!對於第二種方式我曾經有疑惑:這到底是什麼用法?https://segmentfault.com/q/10…
**這並非NG的用法,而是Javascript的技巧。
{true: `adopt`, false: `reject`}[item.approve]
其中,你把{true: `adopt`, false: `reject`}當做某個變數a,你就可以改寫成:
a[item.approve]
如果item.approve值為true,則上面為a[true],也就是`adopt`
反之,則上面為a[false],也就是`reject`。
當然可以使用最常規的三目運算子item.approve ? `adopt` : `reject`。**
第三種:通過key/value的方式
實現方式:
function changeClass(){
$scope.lala = true;
}
<div ng-class=”{’selectClass‘:select,‘choiceClass‘:choice,‘haha‘:lala}”></div>
當lala為true的時候,class則為haha,個人認為這個是比較推薦的,可以彌補第二種方式的點點遺憾~
所以基本上,angularJS中ng-class的實現就這三種方式~