原文出处:https://segmentfault.com/a/11...javascript
在开发中咱们一般会遇到一种需求:一个元素在不一样的状态须要展示不一样的样子。css
而在这所谓的样子固然就是改变其css的属性,而实现能动态的改变其属性值,必然只能是更换其class属性html
这里有三种方法:java
第一种:经过数据的双向绑定(不推荐)segmentfault
第二种:经过对象数组数组
第三种:经过key/valueapp
下面简单说下这三种:双向绑定
第一种:经过数据的双向绑定htm
实现方式:对象
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的实现就这三种方式~