如何在 ngClass 中使用 AngularJS 过滤器?

Posted

技术标签:

【中文标题】如何在 ngClass 中使用 AngularJS 过滤器?【英文标题】:How can I use AngularJS filter in ngClass? 【发布时间】:2014-01-17 07:10:30 【问题描述】:

我目前正在学习 AngularJS 并在玩教程。

我正在修改教程示例过滤器以返回一些字符串:

angular.module('phonecatFilters', []).filter('checkmark', function() 
  return function(input) 
    return input ? 'true-class' : 'false-class';
  ;
);

我想在ngClass 中使用它,如下所示:

phone.trueVal  | checkmark <i ng-class="phone.trueVal  | checkmark "></i>
phone.falseVal | checkmark <i ng-class="phone.falseVal | checkmark "></i>

结果:

true-class <i class="false-class">
false-class <i class="false-class">

现在.. 虽然对于简单视图,过滤器按预期工作.. 为什么它不适用于 ngClass?在ngClass(以及其他类似ngSrc等)中使用过滤值的正确方法是什么。

【问题讨论】:

它适用于我:jsfiddle.net/s3x2F @OlivérKovács css 规则未应用。jsfiddle.net/ja3h8/1 为什么? jsfiddle.net/Zmetser/ja3h8/3 使用过滤器跳过 ng-class 使用类,或者使用声明性方法:jsfiddle.net/Zmetser/3L3de/1 【参考方案1】:

在您的情况下,您应该使用 class 而不是 ng-class,因为您直接在 html 上呈现类名而不进行评估。

<div ng-controller="MyCtrl">
   <i class="phone.trueVal  | checkmark ">phone.trueVal  | checkmark</i>
   <i class="phone.falseVal | checkmark ">phone.falseVal | checkmark</i>
</div>

DEMO

【讨论】:

我不知道为什么它不适用于 AngularJS 教程项目。但我看到它在你的演示中工作,所以我想这一定是我在代码中的某个地方出现了一些愚蠢的错误。 . ngClass 接受一个对象或一个字符串,所以你可以这样做 ng-class=" 'myClass'+item.priority " ***.com/a/14644299/1702919【参考方案2】:

这对我有用。只是盯着 AngularJS,所以我不确定该功能是否是作为更新的一部分添加的,因为这个问题已经存在几年了。

ng-class=" 'has-error': (login.form | validField:'username') "

添加括号后,它起作用了。

【讨论】:

以上是关于如何在 ngClass 中使用 AngularJS 过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用条件语句应用 ngclass [重复]

如何使用 ngClass 执行 if-else?

ngClass 不工作?

如何在角度 7 中使用带有 [ngClass] 的 if-else 条件? [复制]

我可以在条件 [ngCLASS] 下编写 CSS 类吗

我如何在角度中添加 ngClass 需要显示状态为活动的红色,而其他应该是非活动的黑色 [重复]