细说Angular ng-class,让controller更纯洁

简介:

    在前面Angularjs开发一些经验总结中我们说到在angular开发中angular controller never 包含DOM元素(html/css),在controller需要一个简单的POJO(plain object javascript object),与view完全的隔离(交互angularjs框架的职责。但在某些项目中看见controller涉及DOM的元素最多的是在controller scope上定义某变量,其值为class name,形如:


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上的只能是数据和行为。





 本文转自 破狼 51CTO博客,原文链接:http://blog.51cto.com/whitewolfblog/1206484,如需转载请自行联系原作者
相关文章
|
8月前
|
JavaScript
angular从iframe里面调用父页面的controller的方法
angular从iframe里面调用父页面的controller的方法
|
XML Web App开发 JavaScript
SAP UI5和Angular里控制器(Controller)实现逻辑比较
SAP UI5和Angular里控制器(Controller)实现逻辑比较
103 0
SAP UI5和Angular里控制器(Controller)实现逻辑比较
|
XML Web App开发 JavaScript
SAP UI5和Angular里控制器(Controller)实现逻辑比较
SAP UI5和Angular里控制器(Controller)实现逻辑比较
99 0
SAP UI5和Angular里控制器(Controller)实现逻辑比较
|
JavaScript 前端开发
angular语法:Controller As
这个东东我觉得很好哟。 数据可以在同一个页面的不同的controller之间自由穿梭。。。 当然, https://thinkster.io/a-better-way-to-learn-angularjs/controllers 这个网址也不错哟。
1018 0
|
26天前
|
设计模式 JavaScript 前端开发
什么是 Angular 应用里的 Custom provider
什么是 Angular 应用里的 Custom provider
24 2
|
1月前
Angular 应用里异步打开对话框的技术实现
Angular 应用里异步打开对话框的技术实现
16 0
|
1月前
|
Web App开发 UED 开发者
谈谈企业级 Angular 应用的二次开发 - 基于 Angular Component 替换的 Extensibility 支持案例介绍
谈谈企业级 Angular 应用的二次开发 - 基于 Angular Component 替换的 Extensibility 支持案例介绍
23 1
|
23天前
|
Go
Mac安装Angular并部署运行应用
Mac安装Angular并部署运行应用