2013-08-27 4 views
14

Ich erstelle eine Liste in einer ng-repeat, ich muss alle li Elemente geben, die das n-te Kind ihres Vaters oder mehr sind, eine bestimmte Klasse (in unserem ng-repeat bedeutet es alle Kinder, die haben ein Index größer als Mitte). Zum Beispiel, wenn die Liste 10 Elemente ist, muss ich den 5., 6. ... 10. li Kinder eine Klasse geben. Also, wenn mein Code etwas das ist -Eckige Einstellung Klasse In Ng-Wiederholung

[ul] 
    [li ng-repeat="friend in friends"] 
     {{friend.name}} who is {{friend.age}} years old. 
    [/li] 
    [/ul] 

Was ist eine mögliche und gute Möglichkeit, eine Klasse, um die Kinder aus dem Mitte-Index und oben zuweisen? Meine Bedingungen sind, dass ich die Struktur des HTML nicht ändern sollte. Ich kann directives\filters hinzufügen oder Dinge zu Controllern hinzufügen.

+0

fügen Sie einfach etwas wie 'ng-class = "{' yourClass ': $ index> friends.length/2}" auf der li hinzu. – Yoshi

+2

das sieht aus wie schwarze Magie, bist du sicher, dass es funktioniert? –

+1

ja ich bin mir ziemlich sicher;) Wenn sich die Logik ändern kann, könntest du sie natürlich aus der View extrahieren und den Controller entscheiden lassen. ZB: 'ng-class =" someConrollerMethod ($ index, freunde) "' – Yoshi

Antwort

29

einfach verwenden ng-class auf der wiederholten Element, zB:

<li 
    ng-repeat="friend in friends" 
    ng-class="{special: $index > friends.length/2 - 1}"> 

    {{friend.name}} 
</li> 

Demo: http://jsbin.com/iFigAYi/1/


oder die Logik extrahieren, wie:

<ul> 
    <li ng-repeat="friend in friends" ng-class="getClass($index, friends)"> 
    {{friend.name}} 
    </li> 
</ul> 

und

$scope.getClass = function getClass(idx, list) { 
    return { 
    special: idx > list.length/2 - 1 
    }; 
}; 
+1

Ich fand, dass "speziell" in Anführungszeichen gesetzt werden musste – nuander