为什么ng-repeat中的ng-class中的Angular表达式始终被视为true?

时间:2014-05-15 15:10:42

标签: javascript angularjs data-binding

我无法理解这一点。

我正在显示ng-repeat的对象集合,如下所示:

<div ng-repeat="obj in objs">{{obj | json}}</div>

然后,我想根据它所代表的对象是否是“当前对象”,将类current应用于其中一个<div>元素;即,在实践中,obj是否指向与另一个范围变量current相同的东西。

我试过了:

<div ng-repeat="obj in objs" ng-class="{current: 'obj == current'}">{{obj | json}}, current: {{obj == current}}</div>

有趣的是:表达式obj == current在div的主体中被正确评估,并且当范围中的current的值为{{1时,对于所有这些表达式最初为false }}。但是这个类仍适用于所有这些类,尽管它应该依赖于完全相同的表达式。

每当我将null的值更改为指向另一个对象时,div中的文本会相应更新,并更改为current,但该类始终保持应用状态。

我在这里缺少什么?即使表达式产生true

,为什么要应用该类?

使用它:JSFiddle

2 个答案:

答案 0 :(得分:3)

报价导致此失败。它应该改为:

ng-class="{'current': obj == current}"

编辑你的JS小提琴:http://jsfiddle.net/qXgJm/1/

引号导致它总是返回true,因为字符串是真实的

实施例: 这将评估为true,并记录&#39; !!!!&#39;

if ("hello world") {
  console.log('!!!!');
}

答案 1 :(得分:1)

您应该在ng-class中使用不带'的表达式。

<div ng-repeat="obj in objs" ng-class="{current: obj == current}">{{obj | json}}, current: {{obj == current}}</div>

就像这个JSFiddle

一样