关于AngularJS中的ng-class
博客专区 > 顽Shi 的博客 > 博客详情
关于AngularJS中的ng-class
顽Shi 发表于4年前
关于AngularJS中的ng-class
  • 发表于 4年前
  • 阅读 25629
  • 收藏 2
  • 点赞 2
  • 评论 1

【腾讯云】如何购买服务器最划算?>>>   

摘要: angular提供的一种改变class的方式,但是在controller涉及了classname在我看来是乎总是那么诡异,我希望的是controller是一个干净的纯javascript意义的object。

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

共有 人打赏支持
粉丝 270
博文 81
码字总数 92387
评论 (1)
邪气小生
其实不推荐的那种是最方便的,第二种字符串数组的形式只能展现两种不同的class,那么第三种key-value是不是可以给一个元素展示对个class属性?
×
顽Shi
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: