Ich verwende Ionic und möchte die Hintergrundfarbe jedes Elements in einem <ion-list>
basierend auf den Daten dynamisch ändern. Ich dachte ich, das von einem Funktionsaufruf durch täte die richtige KlasseVerwenden von ng-Klasse mit einem Funktionsaufruf - mehrmals aufgerufen
<ion-list>
<ion-item ng-repeat="singleCase in allCases" ng-class="getBackgroundColour(singleCase)" class="item-avatar">
<h2>{{singleCase.date}}</h2>
<p>{{singleCase.caseType}}</p>
</ion-item>
</ion-list>
Dies ist der Controller derzeit
.controller('AllCasesCtrl', ['$scope', '$log', 'dummyData', function($scope, $log, dummyData) {
$scope.allCases = dummyData.cases;
$scope.getBackgroundColour = function(singleCase){
$log.log("getBackgroundColour called...singleCase type: " + singleCase.speciality);
var colourMap = {
speciality1: "speciality1Class",
speciality2: "speciality2Class",
speciality3: "speciality3Class"
};
return colourMap[singleCase.speciality];
};
}])
Auf die Überprüfung der Konsole zurückzukehren, die getBackgroundColour()
Funktion aufgerufen wird 7 Zeiten für jede <ion-item>
in der Liste. Warum ist das, und sollte ich vermeiden, einen Funktionsaufruf in ng-class
zu verwenden?
Sagen wir, ich habe 100 generierte Elemente, es ruft meine Funktion 100 * auf 100 = 10 000 mal. Gibt es eine andere Lösung, um das Dirty Checking System zu umgehen? Als Neuling mit AngularJS habe ich gesehen, dass die Vererbung zwischen Controllern verwendet werden kann, um Daten zu speichern, aber ich weiß nicht, ob es eine "Best Practice" ist. Kann mir jemand Licht dazu bringen? thx – Alex
@Alex Woher kommt die zweite "100" in Ihrem Kalkül? Du kannst deine Ausdrücke nur einmal bewerten, wenn du weißt, dass sie sich nicht ändern (das ist die [faul einmalige Bindung] (http://stackoverflow.com/q/23969926/2057033)), aber du kannst nicht "umgehen" das schmutzige Kontrollsystem. Woher weißt du, dass sich deine Werte geändert haben? – Blackhole
Ja, ich habe das ein bisschen zu schnell geschrieben. Ich wollte sagen, dass die Funktion (100 + 99 + 98 + 97 ... + 2 + 1) mal aufgerufen wird (mit meinem 100-Elemente-Beispiel). Durch die Umgehung des dreckigen Kontrollsystems ist es hier mein schlechtes Englisch, das mich betrogen hat. Ich wollte fragen, ob es einen Weg gibt, den Wert nur einmal zu überprüfen, indem ich einen anderen Ansatz verwende. Und schließlich, vielen Dank für Ihre faule einmalige Bindung, werde ich das durchsehen. – Alex