2017-10-02 5 views
1

Ich habe zwei Parameter Ich versuche zu überprüfen, um eine Klasse mit ng-Klasse zu setzen, aber aus irgendeinem Grund wird es nur mit einem funktionieren.mehrere Argumente für ng-Klasse funktioniert nicht

Hier ist mein Code:

ng-class="{'alert-viewed':item.viewed && item.status <= 0} 

Wenn nur uns 'alert-gesehen': item.viewed es funktioniert. Aber das Hinzufügen des item.status check bricht es.

Wer sieht, was ich vermisse?

+0

Was sind typische Werte für 'item.status'? ist "-1" ein gemeinsamer Wert? und warum würdest du Zahlen verwenden, um den Status trotzdem darzustellen? Wenn man sich das genauer anschaut, braucht man wahrscheinlich Parens in der zweiten Hälfte der Anweisung, etwas wie "item.viewed && (item.status <= 0)" – Claies

+0

API setzt einen Standardwert von 0. Die typischen Werte sind Ints. Der Status hat bis zu 4 Zustände. Nun zu der ursprünglichen Frage ... irgendeine Einsicht? Ich kann mir andere Szenarien vorstellen, in denen man einen Ausdruck mit mehr als einem Argument hätte, um eine Klasse zu setzen. – cnak2

+0

haben die Parens nicht geholfen? gerade wird das '&&' zuerst ausgewertet, also wird 'item.viewed && item.status' ausgewertet und dann mit' <= 0' verglichen. was Sie wollen, ist 'item.viewed' getrennt von' (item.status <= 0) 'ausgewertet, nehme ich an ... – Claies

Antwort

1

Die Reihenfolge der Operationen ist in Ihrem Ausdruck falsch. Da && eine höhere Priorität als <= hat, werden Ihre Flags zuerst ausgewertet und dann mit <=0 verglichen. Stattdessen möchten Sie, dass die zweite Hälfte Ihres Ausdrucks zuerst ausgewertet wird, und dann in Bezug auf die erste Hälfte, was bedeutet, dass Sie Klammern um die zweite Hälfte der Anweisung benötigen.

ng-class="{'alert-viewed':item.viewed && (item.status <= 0)}