Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 使用ng类有条件地应用CSS类_Angularjs - Fatal编程技术网

Angularjs 使用ng类有条件地应用CSS类

Angularjs 使用ng类有条件地应用CSS类,angularjs,Angularjs,我正在尝试使用ng类应用多个css类。我正在做以下工作 <span ng-class="{'label':true, 'label-success':status=='Ok', 'label-warning':status=='Warnings', 'label-important':status=='Critical'}">{{status}}</span> {{status} 请参阅正在工作的plunker。有较短的路吗?我尝试过的另一种方法是调用contro

我正在尝试使用ng类应用多个css类。我正在做以下工作

  <span ng-class="{'label':true, 'label-success':status=='Ok', 'label-warning':status=='Warnings', 'label-important':status=='Critical'}">{{status}}</span>
{{status}

请参阅正在工作的plunker。有较短的路吗?我尝试过的另一种方法是调用controller函数,该函数返回CSS类列表,但我不希望用CSS类名污染我的控制器。

重构您认为过于复杂的DOM功能的一个好方法是创建一个指令;例如,您可以创建一个指令,该指令仅基于字符串有条件地应用一个类:

{{status}
app.directive('statusClass',function()){
返回函数(范围、元素、属性){
范围.监视(属性.状态类,函数(值){
如果(值=='Ok')
元素addClass(“标签成功”);
其他的
elem.removeClass(“成功标签”);
//……等等。。。
});
};
});
幕后有更多的代码,但是您的视图被简化了


如果您的类名不同,并且不能使用这样一个指令,您可能会发现使用您的问题中的
ng class
是获得所需效果的最快方法。

要缩短时间,您可以尝试使状态名和类名匹配,然后执行以下操作:

<span class="label" ng-class="'label-'+status">{{status}}</span>
$scope.statuses =
  warning:
    label: 'Warnings'
    class: 'label-warning'
  ok:
    label: 'It`s OK'
    class: 'label-success'
  critical:
    label: 'Something is going wrong...'
    class: 'label-important'
最后,如果代码中的状态、状态标签和引导类都不同,则需要更复杂的结构,如下所示:

<span class="label" ng-class="'label-'+status">{{status}}</span>
$scope.statuses =
  warning:
    label: 'Warnings'
    class: 'label-warning'
  ok:
    label: 'It`s OK'
    class: 'label-success'
  critical:
    label: 'Something is going wrong...'
    class: 'label-important'
并以这种方式使用它:

<span class="label" ng-class="statuses[status].class">{{statuses[status].label}}</span>
{{statuses[status].label}

我只是好奇,既然每个类都需要有条件地应用,那么你怎么能把它缩短呢?如果不缩短就更好了。我把所有3个选项(使用ng类、使用指令和使用控制器)都放在这里表示感谢。这就是我正在做的,但如果可能的话,我会尽量避免将模板逻辑放入控制器中。@Kamlesh,那么您应该使用指令并将其放入itI中,就像这种方法一样。干得好。