Ich arbeite gerade an einer App in Angular. Bis jetzt ist alles gut gegangen. Ich bin wirklich wirklich neu für eckig und bin erstaunt, dass es so lange gedauert hat bis zum ersten wirklichen Roadblock.
Situation:
Ich habe ein Array von Objekten mit jeweils einer Reihenfolge.
%Vor%Der Benutzer muss diese Elemente neu anordnen können. Der neue Auftrag muss auf die Objekteigenschaft 'Auftrag' gesetzt sein.
In HTML werden diese Objekte wie folgt gerendert:
%Vor%Geben Sie im Header-div ein Eingabefeld ein und geben Sie select ein.
%Vor%Der Code für changeItemOrder:
%Vor%(ReorderItems ruft nur die Winkelsortierung mit einem Standardsortiermechanismus auf, der die Ordnungen vergleicht und -1, 1 oder 0 zurückgibt.)
Hier habe ich einen der Bugs in einer der möglichen Lösungen für dieses Problem entdeckt / entdeckt / entdeckt. Hier ist mir aufgefallen, dass mein INT irgendwie in Zeichenkette konvertiert wird, da beim Rendern eine Option zum Wert 'string: 2' hinzugefügt wird.
Ich habe versucht, Optionen auf alle möglichen Arten auszuprobieren, aber selbst diese haben zu Problemen geführt. Die Art und Weise, wie ich ng-Optionen gemacht habe, war, indem ich item.order als item.order in ... und so weiter gemacht habe, dass die Bestellung einfach umgestellt wurde, bis irgendwie alle Artikel die gleiche Reihenfolge hatten. Der Versuch, verschiedene Gruppierungsmethoden oder Trackbys zu verwenden, führte zu anderen Fehlern, wie zum Beispiel die plötzliche Einführung von NaN und NULL im Dropdown oder das vollständige Entfernen der Order-Eigenschaft als Ganzes aus dem Item-Objekt.
Bisher hat die Lösung mit den wenigsten Fehlern die Option "ng-repeat" für meine Optionen verwendet. Das verursacht nur einen Unterschied in der Art von item.order.
Jetzt, nachdem ich weit und breit gesucht habe und Stunden im Stackoverflow verbracht habe (vor allem, bevor ich diese Frage mit diesem raffinierten kleinen Frage-Such-Ding aufgeschrieben habe), komme ich zu dir.
Wenn das nicht möglich ist, wie kann ich meine ng-Optionen schreiben, damit ich das gewünschte Verhalten bekomme? (Ich habe ernsthaft viel probiert, von Track bis zu verschiedenen wie und für Statements, die alle zu verschiedenen Bugs führten)
Beim ersten Laden zeigen alle Selects einen korrekten Wert, so dass alle item.order anfänglich INT sind (ich bekomme sie von unserer API), erst nach der Interaktion werden alle außer dem Objekt, das die Neuanordnung ausgelöst hat, abgefuckt.
Schließlich konnte ich das lösen:
%Vor%Dies und nur diese Lösung (soweit) hat was ich will / brauche. Ich benötige das item.order-Modell, um die aktuelle Position zu verfolgen und den korrekten Wert bei der anfänglichen Belastung anzuzeigen. Du kannst das Modell nicht auf questionIndex setzen, weil das andere HTML-Elemente stört, ich kann es nicht auf $ index setzen, weil das auch komische Dinge gemacht hat.
Während die anderen hier vorgeschlagenen Lösungen "funktionieren", führen sie nicht zu der Spezifikation, die mir gegeben wurde. Also ich denke, das ist irgendwie spezifisch.
Es wird zu einer Zeichenkette geändert, weil HTML keine Vorstellung davon hat, was eine ganze Zahl ist. Letztendlich werden die ausgewählten Variablen aus dem DOM gelesen und in eckige übergeben und so ändert sich der Typ.
Sie können erzwingen, dass das Modell immer eine Ganzzahl mit einer Direktive enthält
%Vor%( plunk )
Aber ich sehe, dass jemand bereits darauf hingewiesen hat, dass es bessere Möglichkeiten geben könnte, die Reihenfolge zu verfolgen. FWIW diese Direktive wird wenigstens dafür sorgen, dass das Modell niemals eine Zeichenkette ist.
Tags und Links javascript angularjs angular-ngmodel ng-options angularjs-ng-options