it-swarm.com.de

Angular Ausdruck, wenn das Array enthält

Ich versuche, einem Element eine Klasse hinzuzufügen, wenn ein jobSet nicht zur Genehmigung mit Ausdrücken ausgewählt wurde.

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

Dies ist nicht gerade eine idiotensichere Methode. Irgendwelche Vorschläge, wie ich das machen soll?

60
Webnet

Sie können dies mit einer etwas anderen Syntax erreichen:

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

Plnkr

114
Stewie

Sie sollten die Vorlagen nicht mit komplexer Logik überladen, es ist eine schlechte Praxis. Denken Sie daran, es immer einfach zu halten!

Der bessere Ansatz wäre, diese Logik in wiederverwendbare Funktionen auf Ihrem $rootScope Zu extrahieren:

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

Verwenden Sie es dann in Ihrer Vorlage:

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

Ich denke, jeder wird zustimmen, dass dieses Beispiel viel lesbarer und wartbarer ist.

15
Slava Fomin II

Schreiben Sie diesen Code irgendwo in Ihre Initialisierung.

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

Dann können Sie es folgendermaßen verwenden:

<li ng-class="{approved: selectedForApproval.contains(jobSet)}"></li>
0
Makz23