ng-class条件更改,但不更新类

ors*_*zky 28 javascript angularjs ng-class

我有一个非常奇怪的问题.我必须active在适当的<li>时候设置一个类$scope.selectedCat == cat.id.该列表使用ng-repeat生成.如果selectedCat为false,则"浏览所有类别"列表项(在ng-repeat之外)将设置为活动状态.setCat()设置$scope.selectedCat变量的值:

<div id="cat-list" ng-controller="CatController">
    <li ng-class="{'active': {{selectedCat == false}}}">
        <a>
            <div class="name" ng-click="setCat(false)" >Browse All Categories</div>
        </a>
    </li>
    <li class="has-subcat" ng-repeat="cat in cats | filter:catsearch" ng-class="{'active': {{selectedCat == cat.id}}}">
        <a>
            <div cat class="name" ng-click="setCat({{cat.id}})" ng-bind-html="cat.name | highlight:catsearch"></div>
        </a>
    </li>
</div>
Run Code Online (Sandbox Code Playgroud)

当页面加载时,一切正常(来自FireBug的快照):

<li ng-class="{'active': true}" class="ng-scope active">
<!-- ngRepeat: cat in cats | filter:catsearch -->
<li class="has-subcat ng-isolate-scope" ng-repeat="cat in cats | filter:catsearch" ng-class="{'active': false}">
Run Code Online (Sandbox Code Playgroud)

但是,当我将$ scope.selectedClass设置为某个cat.id值时,ng-class中的条件会被正确计算,但ng-class不会相应地更新类:

<li ng-class="{'active': false}" class="ng-scope active"> <!--Right here!-->
<!-- ngRepeat: cat in cats | filter:catsearch -->
<li class="has-subcat ng-isolate-scope" ng-repeat="cat in cats | filter:catsearch" ng-class="{'active': true}">
Run Code Online (Sandbox Code Playgroud)

请注意,在第一行中,活动类保持设置,而ng-class的计算结果为false.在最后一行中,未设置active,而ng-class的计算结果为true.

任何想法为什么它不起作用?这样做的正确Angular方式是什么?

Cer*_*rus 35

更换:

ng-class="{'active': {{selectedCat == cat.id}}}"
Run Code Online (Sandbox Code Playgroud)

附:

ng-class="{'active': selectedCat == cat.id}"
Run Code Online (Sandbox Code Playgroud)

在Angular中,你永远不需要像那样嵌套那些花括号.

有关更多示例,请查看ng-class文档.


Aru*_*osh 13

代替

ng-class="{'active': {{selectedCat == cat.id}}}"
Run Code Online (Sandbox Code Playgroud)

使用

ng-class="{active: selectedCat == cat.id}"
Run Code Online (Sandbox Code Playgroud)

  • 我也删除了**单引号**.你不需要那些'活跃'.我不被允许将其添加为对您的答案的评论,这就是为什么作为单独答案发布的原因.道歉,因为你感觉不好. (3认同)

小智 5

嗨,我也面临同样的问题.我顺便解决了问题,而不是直接将值赋给ng-class,调用单独的方法并返回值.

例如:

ng-class="getStyleClass(cat)"

$scope.getStyleClass = function(cat)  {   
      return "active: selectedCat == cat.id";  
}
Run Code Online (Sandbox Code Playgroud)

粗略地我编码.请根据您的要求更改方法.

  • 刮掉那个。这对我不起作用。它仍然将样式放在每个 [selected] 项目上,但是当 `$scope.selected` 更改时(通过我的 `isSelected(date) -&gt; return this.selected === date`),每个连续单击的项目都保留此样式根据其他选择。 (2认同)