细说Angular ng-class
2016-03-15 17:46
906 查看
在前面Angularjs开发一些经验总结中我们说到在angular开发中angular controller never 包含DOM元素(html/css),在controller需要一个简单的POJO(plain object javascript object),与view完全的隔离(交互angularjs框架的职责。但在某些项目中看见controller涉及DOM的元素最多的是在controller scope上定义某变量,其值为class name,形如:
这种方式完全没错,是angular提供的一种改变class的方式,但是在controller涉及了classname在我看来是乎总是那么诡异,我希望的是controller是一个干净的纯javascript意义的object。
在angular中为我们提供了3种方案处理class:
1:scope变量绑定,如上例。(不推荐使用)
2:字符串数组形式。
3:对象key/value处理。
我们继续其他两种解决方案:
1字符串数组形式是针对class简单变化,具有排斥性的变化,true是什么class,false是什么class,其形如;
其结果是2中组合,isActive表达式为true,则 active,负责inactive。
2对象key/value处理主要针对复杂的class混合,其形如:
当 isSelected = true 则增加selected class,
当isCar=true,则增加car class,
所以你结果可能是4种组合。
个人推荐用2,3两种方式,不建议将class放入controller scope之上,scope需要保持纯洁行,scope上的只能是数据和行为。
function ctr($scope){ $scope.test =“classname”; } <div class=”{{test}}”></div>
这种方式完全没错,是angular提供的一种改变class的方式,但是在controller涉及了classname在我看来是乎总是那么诡异,我希望的是controller是一个干净的纯javascript意义的object。
在angular中为我们提供了3种方案处理class:
1:scope变量绑定,如上例。(不推荐使用)
2:字符串数组形式。
3:对象key/value处理。
我们继续其他两种解决方案:
1字符串数组形式是针对class简单变化,具有排斥性的变化,true是什么class,false是什么class,其形如;
function Ctr($scope) { $scope.isActive = true; } <div ng-class="{true: 'active', false: 'inactive'}[isActive]"> </div>
其结果是2中组合,isActive表达式为true,则 active,负责inactive。
2对象key/value处理主要针对复杂的class混合,其形如:
function Ctr($scope) { } <div ng-class {'selected': isSelected, 'car': isCar}"> </div>
当 isSelected = true 则增加selected class,
当isCar=true,则增加car class,
所以你结果可能是4种组合。
个人推荐用2,3两种方式,不建议将class放入controller scope之上,scope需要保持纯洁行,scope上的只能是数据和行为。
相关文章推荐
- AngularJS入门(一)
- 我的angularjs源码学习之旅3——脏检测与数据双向绑定
- 安装Yeoman + Bower + Grunt 创建angularjs 项目结构(新手笔记一)
- AngularJS UI 扩展 AngularUI
- asp.net mvc+angularjs+web api单页应用
- AngularJS入门
- AngularJS 中的Promise --- $q服务详解
- [POJ] 1948 Triangular Pastures (DP)
- js框架 AngularJS+Bootstrap
- AngularJS vs. jQuery,看看谁更胜一筹
- AngularJS in Action读书笔记4(实战篇)——创建Statistic模块
- 在Asp.Net MVC中使用AngularJS的路由
- Angular之双向数据绑定基础
- 使用AngularJS实现一个简单页面
- angularjs 学习笔记
- AngularJS学习笔记(1)
- angularjs和jQuery之checkbox和radio
- Angularjs 实现 $(document).ready()的两种方法
- AngularJS的学习--$on、$emit和$broadcast的使用
- Cordova + Ionic + AngularJS