2013-06-17 8 views
57

jobSetが式を使用して承認のために選択されていない場合、要素にクラスを追加しようとしています。配列が含まれている場合の角の表現

<li class="approvalUnit" ng-repeat="jobSet in dashboard.currentWork" ng-class="{-1:'approved'}[selectedForApproval.indexOf(jobSet)]"> 

これはまったくばかばかしい方法ではありません。どのように私はこれを行う必要があります上の任意の提案?

答えて

111

あなたは少し異なる構文でこれを達成することができます:あなたはそれは悪い習慣だ、複雑なロジックをテンプレートに過負荷をかけてはいけません

ng-class="{'approved': selectedForApproval.indexOf(jobSet) === -1}" 

Plnkr

+0

これがあるべき=右!? http://jsfiddle.net/ARK5q/361/ – nilloc

15

。常にシンプルに保つことを忘れないでください!

より良いアプローチは、あなたの$rootScopeに再利用可能な関数にこのロジックを抽出するために、次のようになります、そして、

.run(function ($rootScope) { 
    $rootScope.inArray = function (item, array) { 
    return (-1 !== array.indexOf(item)); 
    }; 
}) 

テンプレートでそれを使用します。

<li ng-class="{approved: inArray(jobSet, selectedForApproval)}"></li> 

私は誰もがこの例であることに同意すると思いますはるかに読みやすく保守的です。

0

あなたの初期設定のどこかにこのコードを入れてください。

Array.prototype.contains = function contains(obj) { 
    for (var i = 0; i < this.length; i++) { 
     if (this[i] === obj) { 
      return true; 
     } 
    } 
    return false; 
}; 

その後、あなたはそれをこのように使用することができます。

<li ng-class="{approved: selectedForApproval.contains(jobSet)}"></li> 
関連する問題