ng-class不在ng-repeat中工作

时间:2015-04-01 15:36:24

标签: angularjs

我有一个ng-class似乎没有在初始加载时添加类。看起来该函数运行正常,并输出正确的布尔值,但该类只是没有添加。但是,如果我切换值,则会按预期更新。

<ul class="gb-talents-tiers">
  <li class="clearfix" ng-repeat="tier in guide.tiers()">
    <span>{{tier}}</span>
    <ul class="gb-talents-icons clearfix">
      <li ng-repeat="talent in guide.talentsByTier(hero.hero, tier) | orderBy: talent.orderNum">
        <a href="#" class="talents-icon {{hero.hero.className}} {{talent.className}}" ng-class="{ 'tier-selected': guide.hasAnyTalent(hero, talent), 'active': guide.hasTalent(hero, talent) }" ng-click="guide.toggleTalent(hero, talent)" hots-talent>{{talent.name}}</a>
      </li>
    </ul>
  </li>
</ul>

问题在于:

ng-class="{ 'tier-selected': guide.hasAnyTalent(hero, talent), 'active': guide.hasTalent(hero, talent) }"

除了在初始负载上添加的类外,所有内容都按预期输出。当我输出&#34; {{guide.hasTalent(hero,talent)}}&#34;时,它会按预期返回true或false。如果您需要更多信息,我会尽力而为。

编辑:添加hasTalent功能

gb.hasTalent = function (hero, talent) {
  if (hero.talents['tier'+talent.tier] === talent._id) {
    return true;
  }
  return false;
};

添加了一个看似完美的plunkr。 FML。 http://plnkr.co/edit/B8bUm5wD5FtkyFkOJfWr?p=preview

1 个答案:

答案 0 :(得分:0)

ng-repeat的每次迭代都会创建一个新的范围。

因此,如果要从父作用域访问属性,则需要执行以下操作:

ng-class="{ 'tier-selected': $parent.guide.hasAnyTalent(hero, talent),